質問するログイン新規登録

回答編集履歴

2

訂正

2020/02/13 22:21

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -33,7 +33,7 @@
33
33
 
34
34
  > ブロック外で変数の宣言のみをすることに何か意味などあるのでしょうか?
35
35
 
36
- 上述した解釈で、ご質問にも示される setTimeout の第一引数(コールバック関数)を眺めてください。
36
+ 上述した解釈で、ご質問にも示される ~~setTimeout の第一引数(コールバック関数)~~ __ストップウォッチのコード__ を眺めてください。
37
37
 
38
38
  ~~関数内で宣言すると、カウントできません。~~
39
39
  次のようなコードになります。

1

コードの追記と訂正

2020/02/13 22:21

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

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は、様々な処理を行うために非同期で実行する処理も多く、結果を受け取る手段として、ブロックの外で宣言する変数が必要になります。