ここでは、要素の配列を繰り返し処理し、各要素にイベントハンドラを設定し、現在のイテレータ値をそのイベントハンドラにバインドします。私は何を作ってみたことはある:イベントハンドラへのインデックス値のバインド
ここfor (var i = 0; i < elementArray.length; ++i)
{
var elem = elementArray[i];
elem.onmouseover = function() { foo(i); }
}
function foo(index)
{
alert(index);
}
私はfoo
にi
をバインドするためにクロージャを使用しています。問題は、foo
が実際に呼び出されたときに、i
は、foo
が呼び出されたときにはもちろん、elementArray.length
に等しいことになります。i
はすでに最大値に増分されています。ここで私が思うのは、i
の新しいコピーをそれぞれの無名関数にバインドして、正しい値をfoo
に渡すことです。しかし、私はこれを行うための最善の方法は何か分かりません。
いいえ、閉鎖を使用していないか、少なくとも十分ではありません:-) 'for'ループの' {} 'はそうではありません** * *新しい変数スコープを作成します。 JavaScriptでこれを行うのは関数だけです。 – Pointy