トラバーサル問題の変数をvarとしましょう

document.getElementsByTagName Liarryは、VAR(「リー」)=; 

/ *
*方法
*説明:機能(思考閉鎖、現在の値を保存)に際に可変パラメータに実行されるからです。
* /

{(; IはLiarry.lengthを<I ++はVAR I = 0)の場合
(関数(J){
Liarry [J] .addEventListener( 'クリック'、関数(){
にconsole.log(J);
})}) (I);
}


/ *
*方法II
*の説明:現在のLi・オブジェクトに格納された変数値。
* /

(VAR I = 0;私はLiarry.lengthを<; Iは++)について{
Liarry [I] =私は.INDEX
Liarry [I] .addEventListener( 'クリック'、関数(){
にconsole.log(this.indexを)
} )
}


/ *
*方法3
*説明:(本質的にグローバル変数は、ローカル変数になる)引数を渡す、時間の関数を定義する
* /

(VARのI = 0; IはLiarry.lengthを<; Iは++){
ClickEvent(I);
}

関数ClickEvent(J){
Liarry [J] .addEventListener( 'クリック'、関数(){
にconsole.log(J);
})
}


/ *
*メソッドIV
*はせ使用して変数を宣言
* /

のため(LET I = 0;私はLiarry.lengthを<; I ++){
Liarry [I] .addEventListener( 'クリック'、関数(){
にconsole.log(I);
});
}


*等(理解し、存在する欠陥コメントはどこへ行くのローカルエリア)の波を歓迎します:
1は、変数varは、varステートメントは、グローバル変数で、可変リフトが宣言されています。JSエンジンは、forループを実行する場合は、各Liがクリックイベントを追加しますが、今回はこのイベントをトリガし、コールバックが実行されなかったクリックし、コールバックしませんでした私はとき、私は長さと等しくなるまでループを終了し、割り当てませんでしたトリガクリックは、コールバックが実行され、私は値を取得するために行ってきました、この時点での長さの値が覆われています。
図2に示すように、ブロック・レベルの範囲をさせ、(のみ宣言される所定の変数をJS)変数が存在しない持ち上げます。JS各サイクルエンジンは、私は、このサイクルの唯一回スコープ割り当てられている変数iが一旦初期化される変数を再宣言し、値が同じではありません。

おすすめ

転載: www.cnblogs.com/jia-bk-home/p/11563352.html