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

回答編集履歴

3

あっぷされない

2019/12/18 04:09

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -27,4 +27,4 @@
27
27
  })();
28
28
 
29
29
  ```
30
- 最近書き込みがかなか完了しな
30
+ あっぷされない

2

ちょうせい

2019/12/18 04:09

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -26,4 +26,5 @@
26
26
  }
27
27
  })();
28
28
 
29
- ```
29
+ ```
30
+ ※最近書き込みがなかなか完了しない

1

ちょうせい

2019/12/18 03:45

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -1,2 +1,29 @@
1
1
  setTimeoutが外の変数を参照しているからですね
2
- おそらく非同期プログラムの最適化の恩恵だと思います
2
+ おそらく非同期プログラムの最適化の恩恵だと思います
3
+
4
+ よくあるのはvarをletにする処理ですが
5
+ ```javascript
6
+ for(let i = 0; i < 3; i++) {
7
+ setTimeout(()=>{
8
+ console.log(i);
9
+ },0);
10
+ }
11
+ ```
12
+ きちんと引数で渡せば参照されます
13
+ ```javascript
14
+ for(var i = 0; i < 3; i++) {
15
+ console.log(x);
16
+ },0,i));
17
+ }
18
+ ```
19
+ また、きちんと非同期処理を管理すれば引数で渡さなくても大丈夫です
20
+ ```javascript
21
+ (async()=>{
22
+ for(var i = 0; i < 3; i++) {
23
+ await new Promise(resolve=>setTimeout(()=>{
24
+ resolve(i);
25
+ },0)).then(console.log);
26
+ }
27
+ })();
28
+
29
+ ```