以下需要在函数范围内,因为不会发生奇怪的行为是交互式控制台模式。
以下函数按预期返回 5
(function() { var x = 5; return eval("x"); })()
一个简单的透明(ish)更改:
(function() { var x = 5; var j = eval; return j("x"); })()
产生错误:
ReferenceError: x is not defined
这是某种奇怪的安全措施吗?
以下需要在函数范围内,因为不会发生奇怪的行为是交互式控制台模式。
以下函数按预期返回 5
(function() { var x = 5; return eval("x"); })()
一个简单的透明(ish)更改:
(function() { var x = 5; var j = eval; return j("x"); })()
产生错误:
ReferenceError: x is not defined
这是某种奇怪的安全措施吗?
您的第二个示例是间接调用eval
. 间接调用eval
在全局范围内进行评估,其中x
不可见:
var x = 10;
// This will return 10
(function() {
var x = 5;
var j = eval;
return j("x");
})();
// This will return 5
(function() {
var x = 5;
return eval("x");
})();
从规格:
1. ...如果没有通过直接调用 eval 函数来评估 eval 代码,那么
一种。初始化执行上下文,就好像它是一个全局执行上下文...