【发布时间】:2012-10-01 01:00:23
【问题描述】:
在严格模式下,对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?
【问题讨论】:
-
尝试评估其他东西,例如警报。如果它会起作用,那就是歌剧的问题。
-
@Zaffy 我不确定你的意思...
alert将起作用,无论this是否指的是全局对象。 -
哦,对不起,我认为 eval 不能在严格模式下使用。对不起,我的愚蠢。
-
似乎是一个错误。有趣的是,我在 Opera 中运行了 test262 suite,但它似乎没有收到它。也许他们错过了一个测试。为了确定,我再次运行它。
标签: javascript eval opera strict-mode