javascript闭包应用--收集中...

转载:http://www.cnblogs.com/lyk831216/archive/2009/03/27/1423058.html

 

闭包可以用优雅的方式来处理一些棘手的问题,有些程序员声称没有闭包简直就活不下去了。这虽然有些夸张,却从侧面说明闭包有着强大的功能。下面列举了一些闭包应用。

1、通过闭包修正事件注册时的this指针

button1.onclick = (function(owner){
 return function(){
  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(){
           
        }
    }
})();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值