Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是javascript闭包吗?_Javascript_Function_Closures - Fatal编程技术网

这是javascript闭包吗?

这是javascript闭包吗?,javascript,function,closures,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 encapsul

我有这个

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”是一个局部变量,在函数外部不可见,但作为“getMyVar”的返回值除外

var myVar = "I think I am encapsulated";

this.getMyVar = function() {
    return myVar;
}
在对象上设置“myVar”属性就是这样做的,但是“getMyVar”函数并没有返回对象的属性;它返回闭包中局部变量的值。

是的,它是

var myVar = "I think I am encapsulated";

this.getMyVar = function() {
    return myVar;
}
当您在另一个函数内部定义函数时,内部函数可以访问外部函数的所有局部变量

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

是的

var myVar = "I think I am encapsulated";

this.getMyVar = function() {
    return myVar;
}
当您在另一个函数内部定义函数时,内部函数可以访问外部函数的所有局部变量

在您的情况下,
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;
    }
}
这是一个闭包,将返回函数创建时的
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;
    }
}