這裏我的目的是迭代元素數組,並在每個元素上設置事件處理函數,同時還將當前迭代器值綁定到該事件處理函數。我想出來的是:將索引值綁定到事件處理程序
for (var i = 0; i < elementArray.length; ++i)
{
var elem = elementArray[i];
elem.onmouseover = function() { foo(i); }
}
function foo(index)
{
alert(index);
}
這裏我使用閉包綁定i
到foo
。問題是,當foo
被實際調用時,i
總是等於elementArray.length
,因爲當調用foo
時,i
已經增加到最大值。我想在這裏我想要的是將i
的新副本綁定到每個匿名函數,以便它將正確的值傳遞給foo
。但我不確定要做到這一點的最佳方法是什麼。
不,你不使用閉包,或者至少不夠他們:-) for循環的'{}'做**不* *創建一個新的變量範圍。 JavaScript中唯一能做到的就是一個函數。 – Pointy 2012-02-22 17:08:48