次のコードを検討してください。
for( var i = 1; i <= 2; ++i )
{
$( '#id' + i ).click(
function()
{
alert( 'ID = ' + i );
}
)
}
問題は、id1 または id2 がクリックされたときにアラートが常に ID = 3 と表示されることです。なぜこれが発生するのかがわかりました (呼び出し時に評価されます)。(1)
ここでの多くの質問と一般的な記事では、閉鎖の概念を非常によく説明していますが、それを回避する手法を見つけることができませんでした。
ちなみに、私は使用しようとしました(追加のキーワード「new」に注意してください):
new function() { alert( 'ID = ' + i ) }
ただし、アラートが定義された時点でアラートを直接呼び出し、クリック イベントに対しては何もしません。これについて何か考えはありますか?(2)