这是一个javascript关闭?

时间:2012-03-22 20:19:11

标签: javascript function closures

我有这个......

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());

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

3 个答案:

答案 0 :(得分:6)

闭包是围绕“getMyVar”函数。构造函数中的变量“myVar” 是局部变量,除了作为“getMyVar”的返回值之外,在函数外部可见。

在对象上设置“myVar”属性就是这样,但“getMyVar”函数没有返回对象的属性;它在闭包中返回局部变量的值。

答案 1 :(得分:2)

是的,是的。

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

在您的情况下,getMyVar可以通过关闭访问myVar

答案 2 :(得分:2)

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;
    }
}