Javascriptのsettimeout()閉パッケージプロパティを使用する際の注意点

1071 ワード

settimeoutは、次のように使用される関数の実行を遅延するためによく使用されます.
 
  
setTimeout(function(){

}, timeout);

非同期処理のためにsettimeout(function...,0)を使用する場合がある.例:
 
  
function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);
 
return …;
}

 settimeoutが設定した関数プロセッサの前に、関数fが戻る.
非同期処理を使用する場合、特に閉パッケージ特性を使用する場合は、特に注意してください.
例:
 
  
for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}

この方式を初めて使う学生にとって、プログラムは0...9を印刷すると思っているかもしれませんが、結果は確かに10個10を印刷します.問題は,ループが完了するとfunctionが実行され,iが10になり,console.log(i)で10が使用されることである.  あなたの目的は0...9を印刷することです.では、関数パラメータで0....9を保存する方法を変えることができます(実は閉パッケージを利用しています):
 
  
for(var i = 0 ; i < 10; i++){
setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}