我有这个......
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());
它输出:“我想我被封装了两次”。为什么?我不认为这是封闭......
答案 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;
}
}