javascript – 使用eval()定义const变量

前端之家收集整理的这篇文章主要介绍了javascript – 使用eval()定义const变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试使用var定义变量时,一切正常.

但是将其定义为const并不按预期工作,并且变量未定义.

window.eval("var v = 5;");
document.body.innerHTML += window.v === undefined;

window.eval("const l = 5;");
document.body.innerHTML += window.l === undefined;

我在Chrome和Node.js上测试过它.我错过了什么吗?

先感谢您!

解决方法

这是因为const默认情况下会打开严格模式.看看当你明确打开两个例子的严格模式时会发生什么:
window.eval("'use strict'; var v = 5;");
document.body.innerHTML += window.v === undefined;

window.eval("'use strict'; const l = 5;");
document.body.innerHTML += window.l === undefined;

有关严格模式的更多信息,请参阅:

> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

特别是这部分:

Second,eval of strict mode code does not introduce new variables into the surrounding scope. In normal code eval(“var x;”) introduces a variable x into the surrounding function or the global scope. This means that,in general,in a function containing a call to eval every name not referring to an argument or local variable must be mapped to a particular definition at runtime (because that eval might have introduced a new variable that would hide the outer variable). In strict mode eval creates variables only for the code being evaluated,so eval can’t affect whether a name refers to an outer variable or some local variable [emphasis added]

另见本文:

> New ES5 strict mode support: new vars created by strict mode eval code are local to that code only

猜你在找的JavaScript相关文章