【发布时间】:2016-09-17 20:06:29
【问题描述】:
我在 JS 中使用 eval 时遇到了奇怪的行为。
var f = function () {
var x = 10;
return function () {
eval('console.log(x);');
window['eval']('console.log(x);');
}
};
f()();
输出:
10
undefined:1
console.log(x);
^
ReferenceError: x is not defined
为什么使用eval 显式捕获x 而global['eval'] 没有?
而且即使global['eval']没有捕捉到x,为什么在已经捕捉到x的eval之后就看不到了?
【问题讨论】:
-
更好的问题是你为什么使用 eval? eval 做神奇的事情。最好别管它。
-
有时为了远程测试,我需要快速加载和运行我的本地代码。不适用于生产代码:)
-
@NehalJWani 不相关,问题是关于使用
eval时的捕获。谢谢。 -
“有时对于远程测试,我需要快速加载并运行我的本地代码” - 然后我建议您找到更好的方法来做到这一点。您已经无法理解现在正在发生的事情,因此在以这种方式进行测试时,您很可能会再次遇到此类或类似的行为 - 因此您将永远无法快速确定问题出在您的实际代码上,还是仅与你让它执行的方式。我宁愿使用调试工具,让我的生活更轻松,而不是更难。
标签: javascript eval