1

在严格模式下,间接调用eval应该this绑定到 eval 代码中的全局对象。

10.4.2:在第 5 版中,对 eval 函数的间接调用使用全局环境作为 eval 代码的变量环境和词法环境。在第 3 版中,间接评估的调用者的变量和词法环境被用作评估代码的环境。

然而,在 Opera 中,这个表达式的结果是undefined

(function(){'use strict'; return (0 || eval)('this'); }())

Chrome 和 Firefox 按预期工作。

我在这里找到了这个:http: //kangax.github.com/jstests/indirect-eval-testsuite/

这是浏览器错误吗?如果是这样,它是否正在被跟踪?

另请参阅为什么某些形式的间接评估在 Opera 和 Safari 中会失败?

4

1 回答 1

3

Opera 的 ECMAScript 引擎似乎在这里进行了一些过度优化,其中“(0||eval)”在编译之前被简化为“eval”。在这种情况下,这种优化引入了一个错误,因为它改变了代码的行为。

(在 Opera 内部,我们将此问题跟踪为 CORE-47727)

于 2012-10-09T13:12:14.583 回答