Javascript的setTimeout()使用闭包特性时需要注意的问题_javascript技巧

WBOY
Freigeben: 2016-05-16 16:35:53
Original
1374 Leute haben es durchsucht

setTimeout经常被用于延迟执行某个函数,用法为:

复制代码代码如下:

setTimeout(function(){

}, timeout);

有时为了进行异步处理,而使用setTimeout(function…,0);比如:

复制代码代码如下:

function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);

return …;
}

在setTimeout设定的函数处理器之前,函数f返回;

在使用异步处理时,尤其是使用闭包特性时,要特别小心;

例如:

复制代码代码如下:

for(var i = 0 ; 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 setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!