我正在学习javascript闭包,我已经阅读了很多关于闭包的例子,但我仍然感到困惑,为什么我们必须使用闭包?
这是我从“The Good Parts”中复制的一个例子
var myObject = function(){
var value = 0;
return {
increment: function(inc){
value += inc;
},
getValue: function(){
return value;
}
}
};
var obj1 =myObject();
document.write(obj1.getValue()); //0
obj1.increment(10);
document.write(obj1.getValue());//10
但我想知道为什么我们不应该这样写?
var myObject = function(){
var value = 0;
this.increment= function(inc){
value += inc;
},
this.getValue= function(){
return value;
}
};
var obj1 =new myObject();
document.write(obj1.getValue());
obj1.increment(10);
document.write(obj1.getValue());
第一次问问题,英语不好,原谅我!
答案 0 :(得分:0)
工作正常。两种方法都使用闭包来包含局部变量。
答案 1 :(得分:0)
当您需要访问不再在范围内的对象内的值时,闭包很有用。当您使用好部件中的代码时,每次使用value
时变量increment
都会递增,尽管函数myObject
已经返回。
答案 2 :(得分:0)
就闭包而言,语法是等价的。
然而如果您想要输入对象,则必须使用第二种语法。
使用第一种语法:
obj1 instanceof myObject === false.
使有点单身。
而第二种语法将为您提供:
obj1 instanceof myObject === true
使您的对象成为myObject的实例