0

这是一个例子:

function outerFunc(){
    //some variable 

    var x = 10;

    Obj = function(){  //Its global function created without var keyword
        this.a = x;
    }
}

Obj所以现在当我在调用函数后创建对象的新实例时outerFunc

outerFunc();

myObj = new Obj();

myObj.a;  //prints 10 

所以我想知道x当我定义Obj为全局构造函数时它如何读取包含函数的私有变量,它仍然可以读取值。

4

1 回答 1

2

您无法x从外部访问闭包中声明的属性。

在这里,您读取的不是私有变量的值x,而是您制作并存储到的副本 a

如果您的问题是为什么您可以x从函数内部访问Obj:这就是闭包的工作方式:函数可以访问声明它的范围的变量。这个函数被分配给Obj变量并且这个变量是全局的这一事实完全没有改变。

这里有一些额外的阅读:关于闭包的 MDN

于 2013-09-14T10:33:18.953 回答