//糟糕的例子 var add_handlers = function(nodes){ var i; for(i = 0; i < nodes.length; i++){ nodes[i].onclick = function (e){ alert(i); }; } }; //结束糟糕的例子 //改进的例子 var add_handlers = function(nodes){ var helper = function(i){ return function(e){ alert(i); } }; var i; for(i=0; i< nodes.length; i+=1){ nodes[i].onclick = helper(i); } };
糟糕的例子问题在于事件处理器函数绑定了变量i本身,而不是函数在构造时的变量i的值。
避免在循环中创建函数。