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

Pet*_*tai 2 javascript syntax

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

以下函数按预期返回5

(function() { var x = 5; return eval("x"); })()
Run Code Online (Sandbox Code Playgroud)

一个简单的透明(ish)变化:

(function() { var x = 5; var j = eval; return j("x"); })()
Run Code Online (Sandbox Code Playgroud)

产生错误:

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

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

Jam*_*ice 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");
})();
Run Code Online (Sandbox Code Playgroud)

规格:

 1. ...如果eval代码没有通过直接调用eval函数进行评估

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