新的功能范围

时间:2015-08-01 13:38:07

标签: javascript scope

我有一段带有ReferenceError here

的代码

或以下:

function foo() {

    function bar() {
        console.log('bar');
    }

    var x = new Function('bar();');
    x();
}

foo(); // ReferenceError: bar is not defined

是否有可能实现这一目标?我的意思是bar函数存在于new Function

2 个答案:

答案 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.