繁体   English   中英

这是javascript闭包吗?

[英]Is this a javascript closure?

我有这个....

function MyFunction() {
    var myVar = "I think I am encapsulated";

    this.getMyVar = function() {
        return myVar;
    }
}

var myProperty = new MyFunction();
console.log(myProperty.getMyVar());

myProperty.myVar = "you're not encapsulated";
console.log(myProperty.getMyVar());

它输出:“我认为我被封装了两次”。 为什么? 我不认为这是关闭...

该闭包围绕“ getMyVar”函数。 变量“myVar的”构造函数中的一个局部变量,函数外可见的,除非从“getMyVar”的返回值。

在对象上设置“ myVar”属性可以做到这一点,但是“ getMyVar”函数不会返回对象的属性。 它在闭包中返回局部变量的值。

是的。

当您在另一个函数内部定义一个函数时,内部函数可以访问所有外部函数的局部变量...

就您而言, getMyVar可以通过封闭访问myVar

var myVar = "I think I am encapsulated";

this.getMyVar = function() {
    return myVar;
}

这是一个闭包,将返回函数创建时的 myVar变量。 请注意,这是一个局部变量,因此在此函数退出后,没有其他方法可以访问它。

var myVar = "I think I am encapsulated";

请注意,这不是this.myVar (您稍后使用myProperty.myVar设置的变量)。

您可能正在尝试做的是:

function MyFunction() {
    this.myVar = "I think I am encapsulated";

    this.getMyVar = function() {
        return this.myVar;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM