构造函数内的变量范围

时间:2013-05-30 14:20:25

标签: javascript

在JavaScript中,函数总是可以访问全局变量。我有一个我正在使用的类,它引用了全局变量。这是一个类似的课程:

function Test(){
    this.abc = abc;
}

如果我设置全局abc然后调用它,它就会起作用。

var abc = 123,
    testA = new Test;

console.log(testA.abc); // 123

但是如果我不希望abc成为全球性的呢?我在函数调用中包装了代码,但是我收到错误abc is not defined

(function(){
    var abc = 123,
        testA = new Test;  // ERROR: abc is not defined

    console.log(testA.abc);
})();

如何在不向全局范围添加变量的情况下读取JavaScript构造函数内的局部变量?

1 个答案:

答案 0 :(得分:3)

问题是局部变量有词汇范围。

这意味着要解决它们必须位于相同的代码块内,或者封装代码块。

只有在Test的定义也在IIFE中时,您的代码才有效:

(function(){
    var abc = 123,
        testA = new Test;  // ERROR: abc is undefined

    function Test() {      // this will be hoisted
        this.abc = abc;
    }

    console.log(testA.abc);
})();