双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

提问一个关于闭包的问题

aofengdaxia aofengdaxia 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
查看了很多关于闭包的问题。
大家都说闭包主要应用于两个场合
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、如果不是闭包,第二种情况是否也可以达到和第一种一样的效果呢?在实际使用中,那种会更好呢?那种会更舒服,更常用呢。
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
aofengdaxia
JavaScript 87,983 成员 224,680 内容