私はletとvarの違いを知っています。 letはブロックスコープで、varは機能スコープです。setTimeoutの中のletとvarの違いは?
for(var i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 3
3
3
Iは、(console.log(i)
私の範囲がグローバルであるため、iの値が3になる時点で実行される)動作している方法コードスニペット上知っています。
しかし
for(let i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 1
2
3
私を混乱させ、上記のコードスニペット。私によれば、参照エラーが発生するはずです(console.log(i)
が実行され、ローカルスコープではグローバルスコープではiの値が見え、グローバルでは宣言/定義されていないので参照エラーとなるはずです)
実行時に2nd forループがどのように機能するのか説明できる人はいますか?
letは、letを使用すると、各繰り返しに対してiの新しいインスタンスをクローズします。 – Blindman67
「参照エラー」がスローされる場合、クロージャの種類は機能しません。関数のスコープは 'var'でも、' let'のスコープでもありません。 –
あなたは時間があるときこの[記事](http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html)に行ってください。それは、スコープ、ホイストなどを本当にうまく説明します。 – Fahmi