【问题标题】:JavaScript new Function scope ReferenceErrorJavaScript 新函数作用域 ReferenceError
【发布时间】:2015-04-19 22:57:36
【问题描述】:

有什么方法可以让下面的代码正常工作吗?

(function(){
    var n = "abc";
    (new Function("return alert(n);"))();
})();

如果我在浏览器中运行代码,结果是:“Uncaught ReferenceError: n is not defined”。

另外,我还需要在“新函数”中也可以访问一些其他变量,例如“n”。

请帮忙, 谢谢

【问题讨论】:

  • 在这种情况下你为什么要使用new FunctionMDN documentation 中有一个大大的黄色注释,​​不容忽视:"注意: 使用 Function 构造函数创建的函数不会为其创建上下文创建闭包;它们总是在全局范围内创建。[...]"

标签: javascript function scope referenceerror


【解决方案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() 没有做任何有用的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2011-11-22
      相关资源
      最近更新 更多