2017-04-03 46 views
2

当我尝试使用VAR定义一个变量,一切工作。定义常量使用可变的eval()

但将其定义为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的我错过了什么吗?

预先感谢您!

回答

5

这是因为const默认启用的严格模式。看到当你打开strict模式。这两个例子中明确发生了什么:

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;

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

特别是这部分:

其次,EVAL的严格模式代码不引入新的变量到周围的范围。在正常的代码中,eval(“var x;”)在周围函数或全局范围中引入了一个变量x。这意味着,在一般情况下,在一个函数包含调用EVAL每名指的不是一个参数或局部变量必须在运行时被映射到一个特定的定义(因为EVAL可能已经引入了一个新的变量,将隐藏外部变量)。 在严格模式的eval仅被评估的代码创建变量,因此EVAL可以在不影响的名称是否是指外变量或一些局部变量 [添加强调]

参见本文:

+0

哦,这是有道理的。谢谢!我会在几分钟内接受你的回答:) – jooas