JavaScript 新函数作用域 ReferenceError
Posted
技术标签:
【中文标题】JavaScript 新函数作用域 ReferenceError【英文标题】:JavaScript new Function scope ReferenceError 【发布时间】:2015-04-19 22:57:36 【问题描述】:有什么方法可以让下面的代码正常工作吗?
(function()
var n = "abc";
(new Function("return alert(n);"))();
)();
如果我在浏览器中运行代码,结果是:“Uncaught ReferenceError: n is not defined”。
另外,我还需要在“新函数”中也可以访问一些其他变量,例如“n”。
请帮忙, 谢谢
【问题讨论】:
在这种情况下你为什么要使用new Function
? MDN documentation 中有一个大大的黄色注释,不容忽视:"注意: 使用 Function
构造函数创建的函数不会为其创建上下文创建闭包;它们总是在全局范围内创建。[...]"
【参考方案1】:
所以你需要将变量设为全局变量。
(function()
window.n = "abc";
(new Function("return alert(n);"))();
)();
【讨论】:
【参考方案2】:当您使用new Function
方法(顺便说一下,类似于eval
)时,您的代码将在全局 范围内执行! n
只存在于那个匿名函数中,它不是全局的。
除非 100% 必要,否则您不应使用 new Function
。
(function()
var n = "abc";
(function()return alert(n);)();
)();
附: alert
返回undefined
所以return alert()
没有做任何有用的事情。
【讨论】:
以上是关于JavaScript 新函数作用域 ReferenceError的主要内容,如果未能解决你的问题,请参考以下文章