在严格模式下,对eval
的间接调用应该this
绑定到eval代码中的全局对象。
10.4.2:在第5版中,对eval函数的间接调用使用全局环境作为eval代码的变量环境和词法环境。在第3版中,间接eval的调用者的变量和词法环境被用作eval代码的环境。
但是,在Opera中,此表达式会生成undefined
:
(function(){'use strict'; return (0 || eval)('this'); }())
Chrome和Firefox按预期工作。
我在这里找到了这个:http://kangax.github.com/jstests/indirect-eval-testsuite/
这是一个浏览器错误吗?如果是的话,它是否被跟踪了?
另见Why do some forms of indirect eval fail in Opera and Safari?
答案 0 :(得分:3)
Opera的ECMAScript引擎似乎在这里进行了一些过度的优化,其中“(0 || eval)”在编译之前被简化为“eval”。在这种情况下,此优化会引入错误,因为它会更改代码的行为。
(在Opera内部我们将此问题跟踪为CORE-47727)