私はJavascriptのクロージャを理解しようとしています。私は3つの例の下に出くわしました。
Expample 1:クロージャを理解する、繰り返しごとに異なるスコープを作成する
for (var i = 0; i <= 10; i++) {
setTimeout(function() {
console.log("i :" + i)
}, i * 1000);
}
そして、それは「私の:11」印刷して期待通りに出力されているコンソールに11回を一つだけ範囲がグローバルスコープでループ全体のために作成されているため、 。各反復で異なる範囲を持つには、IIFE(すぐに呼び出される関数式)を使用しました。下記のコードをご覧ください。
例:異なる範囲を反復ごとに作成されるため、期待どおり ":0 I" "10 I" に2
for (var i = 0; i <= 10; i++) {
(function(i) {
setTimeout(function() {
console.log("i : " + i)
}, i * 1000)
})(i);
}
それから印刷します。
私は以下のコードスニペットで正確に何が起こっているのか理解できません。
例: ":0 I" "I 10" を3
for (let i = 0; i <= 10; i++) {
setTimeout(function() {
console.log("i :" + i)
}, i * 1000);
}
それから印刷します。
1.出力が最初の例と同じではない、つまり「1:11」の印刷が11回と同じではないことを理解できませんか?
2。ブロックスコープを使用すると、繰り返しごとに異なるスコープが作成されていますか?
3。異なるスコープが作成されている場合、example-1とどのように異なるのでしょうか?