JavaScript新函数作用域ReferenceError

时间:2015-02-18 19:24:00

标签: javascript function scope referenceerror

有没有办法让下面的代码工作?

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

如果我在浏览器中运行代码,结果是:“未捕获的ReferenceError:n未定义”。

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

请帮忙, 谢谢

2 个答案:

答案 0 :(得分:6)

当您使用new Function方法(顺便说一下,类似于eval)时,您的代码将在全局范围内执行! n只存在于匿名函数中,它不是全局函数。

除非100%必要,否则您不应该使用new Function

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

P.S。 alert会返回undefined,因此return alert()没有做任何有用的事情。

答案 1 :(得分:4)

所以你需要将这些变量变为全局变量。

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