回答編集履歴
2
訂正
answer
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
|
34
34
|
> ブロック外で変数の宣言のみをすることに何か意味などあるのでしょうか?
|
35
35
|
|
36
|
-
上述した解釈で、ご質問にも示される setTimeout の第一引数(コールバック関数)を眺めてください。
|
36
|
+
上述した解釈で、ご質問にも示される ~~setTimeout の第一引数(コールバック関数)~~ __ストップウォッチのコード__ を眺めてください。
|
37
37
|
|
38
38
|
~~関数内で宣言すると、カウントできません。~~
|
39
39
|
次のようなコードになります。
|
1
コードの追記と訂正
answer
CHANGED
@@ -35,5 +35,25 @@
|
|
35
35
|
|
36
36
|
上述した解釈で、ご質問にも示される setTimeout の第一引数(コールバック関数)を眺めてください。
|
37
37
|
|
38
|
-
関数内で宣言すると、カウントできません。
|
38
|
+
~~関数内で宣言すると、カウントできません。~~
|
39
|
+
次のようなコードになります。
|
40
|
+
```javascript
|
41
|
+
const start = document.getElementById('start');
|
42
|
+
// 1)メモリ番地を(とりあえず)確保
|
43
|
+
let startTime;
|
44
|
+
function countUp() {
|
45
|
+
|
46
|
+
// 3)以降繰り返し. startTime のメモリを参照し格納済みの値を読む
|
47
|
+
console.log(Date.now() - startTime);
|
48
|
+
|
49
|
+
setTimeout( () => {
|
50
|
+
countUp(); // 再帰呼び出し
|
51
|
+
}, 10);
|
52
|
+
}
|
53
|
+
start.addEventListener('click', () => {
|
54
|
+
// 2)startTime のメモリに Date値を格納
|
55
|
+
startTime = Date.now();
|
56
|
+
countUp();
|
57
|
+
});
|
58
|
+
```
|
39
59
|
JavaScriptは、様々な処理を行うために非同期で実行する処理も多く、結果を受け取る手段として、ブロックの外で宣言する変数が必要になります。
|