use*_*215 5 javascript firefox
这行代码失败有什么理由吗?
new Function("eval('function foo(){ alert() }'); foo()")()
Run Code Online (Sandbox Code Playgroud)
它按照预期在Chromium中弹出警报,但在Firefox中失败(foo未定义).这是一个Firefox错误,还是我的代码有问题?
小智 -1
问题是它eval不继承全局作用域,因此foo是在与调用它的作用域不同的作用域中创建的。您可以通过在函数定义中或通过传递给eval. 即以下两个片段均按预期工作:
new Function("eval('window.foo = function(){ alert() }'); foo()")()
new Function("eval('function foo(){ alert() }', this); foo()")()
Run Code Online (Sandbox Code Playgroud)
这种行为似乎与严格模式有关,正如这里的答案“use strict”所解释的那样;+ jQuery.getScript() = 脚本无法导出到全局命名空间。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |