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

JavaScript语法疯狂:指向eval函数的指针不是eval函数吗?,javascript,syntax,Javascript,Syntax,以下内容需要在函数范围内,因为在交互控制台模式下不会发生奇怪的行为 下面的函数按预期返回5 (function() { var x = 5; return eval("x"); })() 一个简单的透明(ish)更改: 产生一个错误: ReferenceError: x is not defined 这是一种奇怪的安全措施吗?您的第二个示例是对eval的间接调用。对eval的间接调用在全局范围内进行评估,其中x不可见: var x = 10; // This will return 10

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

下面的函数按预期返回5

(function() { var x = 5; return eval("x"); })()
一个简单的透明(ish)更改:

产生一个错误:

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代码,则

a。将执行上下文初始化为全局执行上下文


这是针对评估的吗?我用一个简单的函数检查,复制的引用似乎保留了上下文。@PeterAronZentai-是的,这是特定于
eval
。请通读我链接到的规范部分。附录问题:为什么window.eval被视为一个间接调用,因为global.something应该与something等效,不是吗?@PeterAronZentai-如果不在规范中详细说明,我不能完全确定,但这意味着评估
window.eval
的结果不符合中要求的条件。仅一个站点注释-
“严格使用”
不允许设置
var j=eval
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");
})();