ホームページ  >  記事  >  ウェブフロントエンド  >  自己実行匿名関数を使用して、for ループでクロージャを使用する問題を解決する_javascript スキル

自己実行匿名関数を使用して、for ループでクロージャを使用する問題を解決する_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 16:36:281289ブラウズ

このコードは、予想される 0 ~ 9 の代わりに 10 10 を出力します。これは、クロージャーに i への参照が含まれており、関数の実行時に i が 10 になっているためです

function f1(){
for(var i = 0; i < 10; i++) {
setTimeout(function() {
alert(i); 
}, 1000);
}
}
f1();

上記の問題を解決するには、自己実行匿名関数を使用できます

function f2(){
for(var i = 0; i < 10; i++) {
(function(e) {
setTimeout(function() {
alert(e); 
}, 1000);
})(i);
}
}
f2();

ここの匿名関数は i をパラメータとして取り、ここの e は i のコピーを持ち、参照は e への参照であるため、上記の問題は回避されます

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