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

回答編集履歴

2

a

2018/03/30 02:40

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -48,4 +48,46 @@
48
48
  > counter 9
49
49
  > done
50
50
 
51
+ ```
52
+
53
+ # 追記
54
+
55
+ 今回、質問文に掲載されているコードが期待した順番で動かない理由は、
56
+ setIntervalが非同期実行されるためです。
57
+
58
+ setIntervalやsetTimeoutは非同期実行されるため、
59
+ 同期実行されるものが先に呼ばれることになります。
60
+
61
+ 以下はsetTimeoutを使った例です。
62
+
63
+ ```
64
+ // 【非同期】遅延時間0秒でログ出力
65
+ setTimeout(function() {
66
+ console.log('0 second delay');
67
+ }, 0);
68
+
69
+ // 【非同期】遅延時間1秒でログ出力
70
+ setTimeout(function() {
71
+ console.log('1 second delay');
72
+ }, 1000);
73
+
74
+ // 【同期】100,000から0まで同期的にディクリメント
75
+ var count = 100000;
76
+ while(count--) {
77
+ console.log('count down:', count);
78
+ }
79
+
80
+ //【同期】単純に'Hello'と出力
81
+ console.log('Hello');
82
+
83
+ // 出力結果:
84
+ > count down: 99999 - 同期
85
+ > count down: 99998 - 同期
86
+ > (中略) - 同期
87
+ > count down: 2 - 同期
88
+ > count down: 1 - 同期
89
+ > count down: 0 - 同期
90
+ > Hello - 同期
91
+ > 0 second delay - 非同期
92
+ > 1 second delay - 非同期
51
93
  ```

1

a

2018/03/30 02:40

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -6,6 +6,10 @@
6
6
 
7
7
 
8
8
  ```
9
+
10
+ // 関数timerが関数Aに相当
11
+ // 関数timerの引数に渡すcallbackが関数Bに相当
12
+
9
13
  function timer(callback) {
10
14
 
11
15
  var counter = 0;