JS for循環変数問題


次のコードはvarを使用すると、最後に出力されるのは10です.
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

上記のコードでは、変数ivarで宣言され、グローバル範囲で有効です.したがって、新しいi値は、サイクルごとに古い値を上書きし、最終出力は最終ラウンドのiの値である.letが使用される場合、宣言された変数はブロックレベルの役割ドメイン内でのみ有効であり、最後に出力されるのは6である.
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

上記のコードでは、変数iletで宣言されており、現在のiは本サイクルでのみ有効であるため、各サイクルのiは実際には新しい変数であるため、最後に出力されるのは6である.