Javascript的setTimeout()使用閉包特性時(shí)需要注意的問題
setTimeout經(jīng)常被用于延遲執(zhí)行某個(gè)函數(shù),用法為:
setTimeout(function(){
…
}, timeout);
有時(shí)為了進(jìn)行異步處理,而使用setTimeout(function…,0);比如:
function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);
return …;
}
在setTimeout設(shè)定的函數(shù)處理器之前,函數(shù)f返回;
在使用異步處理時(shí),尤其是使用閉包特性時(shí),要特別小心;
例如:
for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}
對于初次使用這種方式的同學(xué)來說,很可能會(huì)認(rèn)為程序會(huì)打印0…9,可結(jié)果確實(shí)打印10個(gè)10;
問題就在于,當(dāng)循環(huán)完成時(shí),function得到執(zhí)行,而i已經(jīng)變成10,console.log(i)中使用的是10!
加入你的目的是打印0…9,那么可以換一種方式,用函數(shù)參數(shù)來保存0….9(其實(shí)也是利用了閉包):
for(var i = 0 ; i < 10; i++){
setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}
- JavaScript setTimeout()基本用法有哪些
- JavaScript setInterval()與setTimeout()計(jì)時(shí)器
- JavaScript定時(shí)器setTimeout()和setInterval()詳解
- 關(guān)于JS中setTimeout()無法調(diào)用帶參函數(shù)問題的解決方法
- 實(shí)例講解JS中setTimeout()的用法
- js中setTimeout()與clearTimeout()用法實(shí)例淺析
- js setTimeout()函數(shù)介紹及應(yīng)用以倒計(jì)時(shí)為例
- javascript的setTimeout()使用方法總結(jié)
相關(guān)文章
jQuery javascript獲得網(wǎng)頁的高度與寬度的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猨Query javascript獲得網(wǎng)頁的高度與寬度的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04JS使用插件cryptojs進(jìn)行加密解密數(shù)據(jù)實(shí)例
這篇文章主要介紹了JS使用插件cryptojs進(jìn)行加密解密數(shù)據(jù),結(jié)合完整實(shí)例形式分析了javascript基于加密插件實(shí)現(xiàn)加密解密功能的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05javascript瀑布流式圖片懶加載實(shí)例解析與優(yōu)化
這篇文章主要針對javascript瀑布流式圖片懶加載實(shí)例進(jìn)行解析與優(yōu)化,感興趣的小伙伴們可以參考一下2016-02-02JavaScript實(shí)現(xiàn)一個(gè)簡易的計(jì)算器實(shí)例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)一個(gè)簡易的計(jì)算器實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助,一起跟隨小編過來看看吧2018-05-05如何解決日期函數(shù)new Date()瀏覽器兼容性問題
這篇文章主要介紹了如何解決日期函數(shù)new Date()瀏覽器兼容性問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09