ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript の setTimeout() のクロージャ機能を使用するときに注意する必要がある問題

Javascript の setTimeout() のクロージャ機能を使用するときに注意する必要がある問題

高洛峰
高洛峰オリジナル
2017-02-08 16:06:391035ブラウズ

この記事では、JavaScript の setTimeout(0) のクロージャ機能を使用するときに注意する必要がある問題を主に紹介します。必要な友達はそれを参照してください。

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 を出力します

問題は、次の場合です。ループが完了し、関数が実行され、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);
}
JavaScript の setTimeout() のクロージャ機能を使用するときに注意する必要があるその他の問題については、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。