【发布时间】:2017-11-04 22:24:13
【问题描述】:
我阅读了很多关于 javascript 作用域的内容,但似乎仍然无法理解为什么这段代码(左箭头指向的这一行)将 geval 作用域更改为全局作用域而不是函数作用域。 geval 在 test2 内部被调用,所以我认为它具有相同的范围..
const test2 = () => {
var x = 2, y = 4;
console.log(eval('x + y')); // Direct call, uses local scope, result is 6
var geval = eval; // equivalent to calling eval in the global scope
console.log(geval('x + y')); // Indirect call, uses global scope, throws ReferenceError because `x` is undefined
(0, eval)('x + y'); // another example of Indirect call
}
【问题讨论】:
-
您可以将该代码复制并粘贴到问题中,而不是添加它的图像。
-
Eval 有一些奇怪的行为(在这种情况下也是如此)。最好的答案可能是:根本不要使用它。引用它对我来说也没有意义
-
邪恶的评价是邪恶的。
-
@Roy — 您接受的答案归结为“因为规范说它应该这样工作”
-
@Roy There are a lot of reasons why images of code should not be used。我指出这一点并不意味着我知道答案。但它确实可以帮助那些这样做的人,或者想要复制/粘贴它以自己尝试,这最终也可以帮助你得到答案。报复性投票并不真正受到赞赏。如果您只是提到您添加了代码,我会很高兴撤消我的反对票。
标签: javascript