全局函数表达式如何访问包含 JavaScript 函数的变量

how can global function expression can access variable inside containing function in javascript

本文关键字:函数 包含 JavaScript 变量 访问 表达式 何访问 全局      更新时间:2023-09-26

下面是一个例子:

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