糟糕的例子 addHandlers函数目的是给每个时间处理器一个唯一值(i)。
它未能达到目的是因为事件处理器函数绑定了变量i,而不是函数在构造时的变量i的值。
var addHandlers=function(nodes){
for(var i=0;i nodes[i].onclick=function(e){
alert(i);//already alert the number of nodes.length.
};
}
};
结束糟糕的例子 现在,我们定义一个函数并立即传递i进去执行,而不是把一个函数赋值给onclick。
那个函数将返回一个事件处理器函数。这个事件处理器函数绑定的是传递进去的i的值, 而不是定义在addHandlers函数里的i的值。那个被返回的函数被赋值给onclick。
var addHandlers = function(nodes){
for(var i=0;i nodes[i].onclick=function(i){
return function(){
alert(i);
};
}(i);
}
};