[英]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.