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