全局函数表达式如何在javascript中访问包含函数内部的变量

时间:2013-09-14 10:30:26

标签: javascript

以下是一个例子:

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,它仍然可以读取该值。

1 个答案:

答案 0 :(得分:2)

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

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

如果您的问题是您可以从函数x内部访问Obj的原因:这就是闭包的工作方式:函数可以访问声明它的作用域的变量。将此函数分配给Obj变量并且此变量为全局变量的事实完全没有改变。

这是一些额外的阅读:the MDN on closures