但是将其定义为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上测试过它.我错过了什么吗?
先感谢您!
解决方法
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