eval在JS中使用时我遇到了奇怪的行为.
var f = function () {
var x = 10;
return function () {
eval('console.log(x);');
window['eval']('console.log(x);');
}
};
f()();
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
10
undefined:1
console.log(x);
^
ReferenceError: x is not defined
Run Code Online (Sandbox Code Playgroud)
为什么使用eval明确捕获x但global['eval']不是?即使global['eval']没有捕获x,为什么它无法看到eval,已经捕获x?
window ['eval']在全局范围内运行,eval()在本地范围内运行.
来自Mozilla的Javascript参考:
如果间接使用eval函数,通过eval之外的引用调用它,从ECMAScript 5开始,它在全局范围而不是本地范围内工作; 例如,这意味着函数声明会创建全局函数,并且被评估的代码无法访问调用它的范围内的局部变量.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |