JavaScript语法疯狂:指向eval函数的指针不是eval函数?

时间:2013-04-04 12:15:19

标签: javascript syntax

以下需要在函数范围内,因为不会发生奇怪的行为是交互式控制台模式。

以下函数按预期返回5

(function() { var x = 5; return eval("x"); })()

简单透明(ish)更改:

(function() { var x = 5; var j = eval; return j("x"); })()

产生错误:

ReferenceError: x is not defined

这是一种奇怪的安全措施吗?

1 个答案:

答案 0 :(得分:6)

您的第二个示例是对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");
})();

来自the spec

  

1. ...如果未通过直接调用eval函数评估eval代码,则

     

a。初始化执行上下文,就好像它是一个全局执行上下文......