为什么这行代码失败有什么理由?
new Function("eval('function foo(){ alert() }'); foo()")()
它按照预期在Chromium中弹出一个警告,但在Firefox中失败(foo未定义)。这是Firefox的错误,还是我的代码有问题?
答案 0 :(得分:-1)
问题是eval
没有继承全局范围,因此foo
创建的范围与调用范围不同。您可以通过在函数定义中明确指定范围或传递给eval
来解决此问题。即以下两个片段都按预期工作:
new Function("eval('window.foo = function(){ alert() }'); foo()")()
new Function("eval('function foo(){ alert() }', this); foo()")()
此行为似乎与严格模式有关,正如此处"use strict"; + jQuery.getScript() = script can't export to global namespace的答案所解释的那样。