gpt4 book ai didi

javascript - new Function 和 eval 之间的奇怪交互

转载 作者:搜寻专家 更新时间:2023-11-01 04:43:19 25 4
gpt4 key购买 nike

为什么这行代码会失败?

new Function("eval('function foo(){ alert() }'); foo()")()

它按预期在 Chromium 中弹出警报,但在 Firefox 中失败(foo 未定义)。这是 Firefox 的错误,还是我的代码有问题?

最佳答案

问题是 eval 不继承全局作用域,因此 foo 是在与调用它的地方不同的作用域中创建的。您可以通过在函数定义中或通过传递给 eval 明确指定范围来解决此问题。 IE。以下两个片段都按预期工作:

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 .

关于javascript - new Function 和 eval 之间的奇怪交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com