代码改变世界

JS 闭包

2010-09-16 17:46  空逸云  阅读(444)  评论(12编辑  收藏  举报

很多时候.需要在循环的时候绑定元素事件.但实际上由于JS的机制问题,你绑定的代码是等到了你触发了事件时才引发.那么你的循环早就完成了.此时的调用肯定不是你想要的结果.

例如 

 


for (var i = 0; i < items.length; i++) {
      
var item = $("<li ><a>" + i+ "</a></li>");
      item.bind(
"click"function(){ dosometion(i) ;});
      wIngreList.append(item);
 }

 

 

 可以百分百肯定.结果肯定不是你要.此时的i不再是你所需要的.而是items.length.那么怎么办呢?闭包可以完成我们想要的

定义一个闭包的"类" 


 


var closeFunc = function(i) {
            
return function() {
                dosomething(
this, i);
               
//此Function等到事件触发时才执行,假如是click,那么this就是触发click的元素
            }
        }

 

 

 利用这个闭包类.就可以得到我们所想要的结果

 


item.bind(
"click"new closerFunc(items[i]));

 

 OK .大功告成!