Dan*_*mov 11 javascript google-chrome v8 eval use-strict
除了Chrome之外,此代码在所有浏览器中都会生效"ok"警告:
eval("var outer = 0; function test() {'use strict'; outer = 1; } test(); alert('ok');");
Run Code Online (Sandbox Code Playgroud)
我正在做的就是从'use strict'函数引用外部变量,所有这些都在eval上下文中.Chrome说
Uncaught ReferenceError: outer is not defined
Run Code Online (Sandbox Code Playgroud)
注意:我devtool: 'eval'在Webpack中使用时最初遇到过它.
为了简化问题: http: //jsfiddle.net/rokkkjcs/6/
\n\neval("var outer=0;");\nfunction test() {\'use strict\'; outer = 1; } \ntest(); \nalert(\'ok\');\nRun Code Online (Sandbox Code Playgroud)\n\n解释是:
\n\n非严格代码可以使用 \xe2\x80\x98eval\xe2\x80\x99 函数将新变量添加到周围范围。在浏览器提供原生 JSON 支持之前, \xe2\x80\x98eval\xe2\x80\x99 通常(且不安全)用于从字符串构造对象。构造出来的物体就成为周围范围的一部分。在严格模式下,\xe2\x80\x98eval\xe2\x80\x99 不能引入新变量。在严格模式下执行时,以下代码不会将 \xe2\x80\x98bar\xe2\x80\x99 变量引入周围范围。注意:如果包含 \xe2\x80\x98eval\xe2\x80\x99 的函数在严格模式下执行,那么 \xe2\x80\x98eval\xe2\x80\x99 函数内部的代码也会在严格模式下执行。
\n\n更多信息:http://cjihrig.com/blog/javascripts-strict-mode-and-why-you-should-use-it/
\n