闭包应用(收集中....)
闭包可以用优雅的方式来处理一些棘手的问题,有些程序员声称没有闭包简直就活不下去了。这虽然有些夸张,却从侧面说明闭包有着强大的功能。下面列举了一些闭包应用。
1、通过闭包修正事件注册时的this指针
button1.onclick =(function(owner){returnfunction({button1_click.apply(owner,arguments)}})(button1); ?<!---->2、利用闭包加强模块化
闭包有益于模块化编程,它能以简单的方式开发较小的模块,从而提高开发速度和程序的可复用性。和没有使用闭包的程序相比,使用闭包可将模块划分得更小。比如我们要计算一个数组中所有数字的和,这只需要循环遍历数组,把遍历到的数字加起来就行了。如果现在要计算所有元素的积呢?要打印所有的元素呢?解决这些问题都要对数组进行遍历,如果是在不支持闭包的语言中,我们不得不一次又一次重复地写循环语句。而这在支持闭包的语言中是不必要的.
var sum=0;function each(array,callback){ var i=0,length=array.length; for(var v=array[0];i<length;i++){ v=array[i]; callback.call(v,i,v); } return array;}each(n,function(i,o){ sum=sum+o; });each(n,function(i,o)){ sum=sum*o;}?<!---->?
3、抽象,闭包是数据和行为的组合,这使得闭包具有较好抽象能力,下面的代码通过闭包来模拟面向对象编程的单例模式。
MyNamespace.Singleton=(function(){ //private methods var privateAttribute1=false; var privateAttribute2=true; function privateMethod(){ } return {//public members publicAttribute1:true, publicAttribute2:10, method1:function(){ }, method12:function(){ } }})();?
?
大家还有什么新的应用,可以分享下