以下是一个例子:
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
,它仍然可以读取该值。
答案 0 :(得分:2)
您无法从外部访问闭包中声明的属性x
。
在这里,您不会读取私有变量x
的值,而是读取您制作并存储的副本
a
。
如果您的问题是您可以从函数x
内部访问Obj
的原因:这就是闭包的工作方式:函数可以访问声明它的作用域的变量。将此函数分配给Obj
变量并且此变量为全局变量的事实完全没有改变。
这是一些额外的阅读:the MDN on closures