但是将其定义为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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。