下面是一个例子:
function outerFunc(){
//some variable
var x = 10;
Obj = function(){ //Its global function created without var keyword
this.a = x;
}
}
所以现在当我在调用outerFunc
函数后创建Obj
对象的新实例时。
outerFunc();
myObj = new Obj();
myObj.a; //prints 10
所以我想知道它如何读取包含函数的私有变量x
当我将Obj
定义为全局构造函数时,它仍然可以读取值。
您无法从外部访问闭包中声明的属性x
。
在这里,您不会读取私有变量x
的值,而是读取您制作并存储的副本 a
.
如果你的问题是为什么你可以从函数内部访问x
Obj
:这就是闭包的工作原理:函数可以访问声明它的范围的变量。这个函数被分配给Obj
变量并且这个变量是全局变量的事实绝对不会改变任何东西。
以下是一些额外的阅读:闭包的MDN