提问一个关于闭包的问题

aofengdaxia 2014-02-04 04:53:53
查看了很多关于闭包的问题。
大家都说闭包主要应用于两个场合
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、如果不是闭包,第二种情况是否也可以达到和第一种一样的效果呢?在实际使用中,那种会更好呢?那种会更舒服,更常用呢。
...全文
198 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
都是闭包,只不过函数所属的对象不一样 姑且不说什么是闭包,每次谈及闭包的时候,我们可以从以下几个问题入手 1.闭包的特点 函数嵌套函数,内部函数可以引用外部函数的变量或者参数,且被引用的变量或参数不会被垃圾回收机制回收 2.闭包的好处 能使变量长期驻扎在内存中,可以避免全局变量的污染 3.闭包的用处 模块化代码,在循环中获取循环子项的自定义索引 4.闭包的注意事项 IE下的内存泄露
aofengdaxia 2014-02-04
  • 打赏
  • 举报
回复
引用 1 楼 Return_false 的回复:
都是闭包,只不过函数所属的对象不一样 姑且不说什么是闭包,每次谈及闭包的时候,我们可以从以下几个问题入手 1.闭包的特点 函数嵌套函数,内部函数可以引用外部函数的变量或者参数,且被引用的变量或参数不会被垃圾回收机制回收 2.闭包的好处 能使变量长期驻扎在内存中,可以避免全局变量的污染 3.闭包的用处 模块化代码,在循环中获取循环子项的自定义索引 4.闭包的注意事项 IE下的内存泄露
很是受益,期待更加精彩的回复
zhjdg 2014-02-04
  • 打赏
  • 举报
回复
函数 函数的确定, 函数运行用到的变量的分析,
licip 2014-02-04
  • 打赏
  • 举报
回复
楼上说的很好。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧