JavaScriptはforサイクルにおいて、イベント解決パラメータが異なる場合を結びつける.

483 ワード

時には似たようなイベントに応答しますが、各イベントのパラメータは違っています.最初は簡単だと思いました.forサイクルを使えばいいと思いました.
インターネットで資料を調べます!結局大神は閉包で解決すると言いました.
コード:
 
  
for(var i=0;i<10;i++){
btns[i].onclick=(function(i){
return function(){alert(i)}
})(i)
}
大体の原因は直接btns[i].onclick=function(){alert(i)}を使う時、JavaScriptエンジンは先にfor循環中のコードを実行し終わって、
ユーザーがonclickイベントを出発すると、JavaScriptはiを探します.結果として計算完了後のiを見つけます.つまり10です.
ただし、クローズド処理をすると、iは関数の局所変数になります.