JavaScript语法疯狂:指向eval函数的指针不是eval函数吗?
以下内容需要在函数范围内,因为在交互控制台模式下不会发生奇怪的行为 下面的函数按预期返回5JavaScript语法疯狂:指向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
(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");
})();