大家都说闭包主要应用于两个场合
1、获得函数的内部变量,并且对内部变量起到保护作用是,用闭包
2、保存某个函数内部私有变量的数值不被内存回收所使用。
目前基本的闭包原理和上述两点理解清楚。但是我发现不使用闭包好像也可以达到上述两点,上两个例子给大家看看。
1、使用闭包
function Test1(){
var i = 0;
return{
f1:function(){
i++;
return i;
},
f2:function(){
i--;
return i;
}
}
}
var a1 = Test1();
a1.f1(); //=>1
a1.f1(); //=>2
a1.f2(); //=>1
a1.f1(); //=>2
var a2 = Test1();
a2.f1(); //=>1
a2.f1(); //=>2
2、不使用闭包达到同样的效果。借助this函数
var Test2 = function(){
var i=0;
this.f1= function(){
i++;
return i;
}
this.f2 = function(){
i--;
return i;
}
}
var b1 = new Test2();
b1.f1(); //=>1
b1.f1(); //=>2;
b1.f2(); //=>1;
b1.f1(); //=>2;
var b2 = new Test2();
b2.f1(); //=>1
b2.f1(); //=>2
关于上述的代码有几个疑问:
1、上述第一种情况在诸多资料和文章中指明是闭包形式。那么第二种情况算什么呢?有点类似C#或者java中的类和对象,以及public 方法。请问第二种算不算闭包呢?
2、如果不是闭包,第二种情况是否也可以达到和第一种一样的效果呢?在实际使用中,那种会更好呢?那种会更舒服,更常用呢。