闭包——内部函数能访问外部函数得实际变量(而无须复制)

模块模式利用了函数作用域和闭包来创建被绑定对象与私有成员变量的关联,只有特权函数才能够访问特定的私有成员变量(数据对象)。

模块模式(摈弃全局变量的使用,封装程序)的一般形式是:

一个定义了私有变量和函数的函数;

利用闭包创建可以访问私有变量和函数的特权函数;

最后返回这个特权函数,或者把它们保存到一个可以访问到的地方。

 

//糟糕得例子——预期点击一个节点时应输出节点的序号,但是这个总是会显示节点的数目(因为事件处理器函数绑定了变量i本身,而不是函数在构造时的变量i的值)

var   add_the_handlers = function(nodes){

    var   i;

    for(i=0;i<nodes.length;i++){

         nodes[i].onclick = function(e){   console.log(i);   }

    }

}

//先在循环外创建个辅助函数,这个辅助函数再返回一个绑定了当前i值的函数

var   add_the_handlers = function(nodes){

     var  helper = function(i){

            return  function(e){   console.log(I);   }

     }

      var  i;

      for(i=0;i<nodes.length;i++){

             nodes[i].onclick = helper(i);

      }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值