回答編集履歴
2
グローバル変数の記述を削除
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
var は
|
1
|
+
var はforループを抜けても変数が存在し続けます。setTimeout は時間経過後に最終的な変数の値を表示します。
|
2
2
|
|
3
3
|
let はループ内だけで有効なローカル変数。forループを抜けると変数が破棄されてアクセスできなくなります、それでは困るので、setTimeoutに渡す関数を定義する毎にその時点の外部変数を抱え込むようになっています。これをクロージャといいます。なので、ループごとの変数の値を表示できます。
|
4
4
|
|
1
確認コード追記
test
CHANGED
@@ -1,3 +1,31 @@
|
|
1
1
|
var はグローバル変数。forループを抜けても変数が存在し続けます。setTimeout は時間経過後に最終的な変数の値を表示します。
|
2
2
|
|
3
3
|
let はループ内だけで有効なローカル変数。forループを抜けると変数が破棄されてアクセスできなくなります、それでは困るので、setTimeoutに渡す関数を定義する毎にその時点の外部変数を抱え込むようになっています。これをクロージャといいます。なので、ループごとの変数の値を表示できます。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
以下のプログラムで変数の値と表示順序を確認してみるといいです。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
```js
|
12
|
+
|
13
|
+
for (var i = 0; i < 3; i++) {
|
14
|
+
|
15
|
+
setTimeout(() => console.log(i), 1);
|
16
|
+
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
for (let i = 10; i < 13; i++) {
|
22
|
+
|
23
|
+
setTimeout(() => console.log(i), 1);
|
24
|
+
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
console.log("i =", i);
|
30
|
+
|
31
|
+
```
|