这是Chrome错误还是我使用"use strict"和eval无效?

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)

(在jsfiddle尝试).

我正在做的就是从'use strict'函数引用外部变量,所有这些都在eval上下文中.Chrome说

Uncaught ReferenceError: outer is not defined 
Run Code Online (Sandbox Code Playgroud)

注意:我devtool: 'eval'在Webpack中使用时最初遇到过它.

ovi*_*ovi 3

为了简化问题: http: //jsfiddle.net/rokkkjcs/6/

\n\n
eval("var outer=0;");\nfunction test() {\'use strict\'; outer = 1; } \ntest(); \nalert(\'ok\');\n
Run 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