我有一段带有ReferenceError here
的代码或以下:
function foo() {
function bar() {
console.log('bar');
}
var x = new Function('bar();');
x();
}
foo(); // ReferenceError: bar is not defined
是否有可能实现这一目标?我的意思是bar函数存在于new Function
答案 0 :(得分:3)
使用Function构造函数创建的函数不会为其创建上下文创建闭包;它们总是在全球范围内创建。运行它们时,它们只能访问自己的局部变量和全局变量,而不能访问调用Function构造函数的范围。
- MDN
所以不,这不是在使用这种方法时。
不要使用函数构造函数。这是低效的,将字符串转换为代码是fraught with problems。
function foo() {
function bar() {
alert('bar');
}
function x() {
bar();
}
x();
}
foo();

答案 1 :(得分:2)
一种可能的方法是使用eval
代替new Function
:
function foo() {
function bar() {
console.log('bar');
}
eval('x = function() { bar(); }');
x();
}
foo(); // works fine.