質問編集履歴

2

仮変数名変更resolve⇒func

2018/08/25 12:52

投稿

yuzunoha123
yuzunoha123

スコア28

test CHANGED
File without changes
test CHANGED
@@ -134,11 +134,11 @@
134
134
 
135
135
  const psvar = [];
136
136
 
137
- const doSetTimeout = (resolve, i) => {
137
+ const doSetTimeout = (func, i) => {
138
138
 
139
139
  setTimeout(() => {
140
140
 
141
- resolve(i);
141
+ func(i);
142
142
 
143
143
  }, 0);
144
144
 

1

setTimeoutを外部で宣言すると出力結果が変わる

2018/08/25 12:51

投稿

yuzunoha123
yuzunoha123

スコア28

test CHANGED
File without changes
test CHANGED
@@ -79,3 +79,85 @@
79
79
  });
80
80
 
81
81
  ```
82
+
83
+
84
+
85
+ ↓編集により追記しました
86
+
87
+
88
+
89
+ setTimeoutを外部で宣言すると、
90
+
91
+ index変数iの宣言がvarでも
92
+
93
+ 期待通りの出力[ 0, 1, 2, 3, 4 ]になることを発見しました。
94
+
95
+ これも、なぜなのでしょうか。
96
+
97
+
98
+
99
+ ```JavaScript
100
+
101
+ const ps = [];
102
+
103
+ const getPromise = (i) => {
104
+
105
+ return new Promise(resolve => {
106
+
107
+ setTimeout(() => {
108
+
109
+ resolve(i);
110
+
111
+ }, 0);
112
+
113
+ });
114
+
115
+ };
116
+
117
+ for (var i = 0; i < 5; i++) {
118
+
119
+ ps.push(getPromise(i));
120
+
121
+ }
122
+
123
+ Promise.all(ps).then(results => {
124
+
125
+ console.log(results); // [ 0, 1, 2, 3, 4 ]
126
+
127
+ });
128
+
129
+ ```
130
+
131
+
132
+
133
+ ```JavaScript
134
+
135
+ const psvar = [];
136
+
137
+ const doSetTimeout = (resolve, i) => {
138
+
139
+ setTimeout(() => {
140
+
141
+ resolve(i);
142
+
143
+ }, 0);
144
+
145
+ };
146
+
147
+ for (var i = 0; i < 5; i++) {
148
+
149
+ psvar.push(new Promise(resolve => {
150
+
151
+ doSetTimeout(resolve, i);
152
+
153
+ }));
154
+
155
+ }
156
+
157
+ Promise.all(psvar).then(results => {
158
+
159
+ console.log(results); // [ 0, 1, 2, 3, 4 ]
160
+
161
+ });
162
+
163
+ ```