0
誰かが私を助けることができれば、私は本当に、明確に理解していなかった何かがあります:非同期スコープ
let arr = [1,2,3,4,5,6,7];
let b = 0
for (let a of arr) {
setTimeout(() => {
console.log(b, a)
}, 2000)
b = b + 1;
}
/* Output
7 1
7 2
7 3
7 4
7 5
7 6
7 7
*/
のは、2秒後に、変数b
は、その後、7に等しいためb
が7に等しいとしましょうなぜa
の動作がb
と異なるのですか?
bは、forループによってカウントアップされるグローバル変数です(常に同じ変数b)。 aはあなたのforループで宣言されているので、各反復で新しい値を持つaの新しいインスタンスを取得します。このインスタンスはforループ内で使用でき、setTimeoutに渡される無名関数にバインドされます。 letの詳細については、MDNをご覧ください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let – glutengo