JavaScriptは間違いの例を理解しやすいです.

709 ワード

1 for (var i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); }// 6 2 for (let i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); } // 1,2,3,4,5 3 for (var i = 1; i <=5; i++){ (function () { var j = i; setTimeout(function timer() { console.log(j); }, j*1000); })(i);} // 1,2,3,4,5 4は、このコードfor (var i =1; i<=5; i++){ (function (j) { setTimeout(function timer() { console.log(j); }, j*1000); })(i);}コード1にどのような欠陥があるかを改善し、その動作が意味によって示唆されるものと一致しないかを示す.欠陥はサイクル中の各反復が実行時に自分に「キャプチャ」のiのコピーを与えると仮定しようとしているが、作用領域の動作原理によれば、実際にはサイクル中の5つの関数がそれぞれ定義されているにもかかわらず、彼らは共有されたグローバル作用領域に封じ込められているので、iだけが実際にある.