以下需要在函数范围内,因为不会发生奇怪的行为是交互式控制台模式.
以下函数按预期返回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)
这是一种奇怪的安全措施吗?
你的第二个例子是间接调用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函数进行评估
一个.初始化执行上下文,就好像它是全局执行上下文一样......
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |