var letとconst

1957 ワード

まず栗を見ます.
for (let i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}
1,2,3,4,5を印刷します.
for (var i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}
5つの6つを印刷します

for (var i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}
なぜですか
es 6のletは領域作用分域変数であるため、サイクル毎に独立した作用域であるため、5つのsetTimeoutのi値は互いに独立している.
S 5のvarは関数の範囲によってスコープを区別します.サイクルの領域は単独のスコープではないので、いつも同じiです.setTimeoutが実行を開始した時、forサイクルはすでに終了しました.だから、5つの6をプリントします.
letコマンド定義変数には、(1)変数はブロックレベルのスコープ内でのみ有効であり、ブロックレベルのスコープ内で独立して、外部の影響を受けない(2)変数は先に定義してから使用しなければなりません.また、jsプリコンパイル時に変数アップグレードが存在しません.グローバルでletを使って変数を定義する場合、この変数はグローバル属性には含まれません.constコマンドは、定数を定義するために使用され、一度割り当てが完了すると、変更できません.他の特性はlet変数と同じです.let、const定義変数は、var定義変数を使用する際にもたらす様々な予期せぬ状況と不合理な状況を解消し、変数の定義が明確に制御され、letとconstがあると、var定義変数を再使用するべきではない.また、let、constの選択は、より効率的であるため、プログラム中の変数が初期化されると変更されない場合は、より合理的にconstを使用する.変数が繰り返し割り当てを必要とする場合は、letを選択します.
もっとletについて:http://es6.ruanyifeng.com/#docs/let