Javascript的setTimeout()使用閉包特性時(shí)需要注意的問(wèn)題
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);
}
對(duì)于初次使用這種方式的同學(xué)來(lái)說(shuō),很可能會(huì)認(rèn)為程序會(huì)打印0…9,可結(jié)果確實(shí)打印10個(gè)10;
問(wèn)題就在于,當(dāng)循環(huán)完成時(shí),function得到執(zhí)行,而i已經(jīng)變成10,console.log(i)中使用的是10!
加入你的目的是打印0…9,那么可以換一種方式,用函數(shù)參數(shù)來(lái)保存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()無(wú)法調(diào)用帶參函數(shù)問(wèn)題的解決方法
- 實(shí)例講解JS中setTimeout()的用法
- js中setTimeout()與clearTimeout()用法實(shí)例淺析
- js setTimeout()函數(shù)介紹及應(yīng)用以倒計(jì)時(shí)為例
- javascript的setTimeout()使用方法總結(jié)
相關(guān)文章
jQuery javascript獲得網(wǎng)頁(yè)的高度與寬度的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇jQuery javascript獲得網(wǎng)頁(yè)的高度與寬度的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04無(wú)阻塞加載js,防止因js加載不了影響頁(yè)面顯示的問(wèn)題
下面小編就為大家?guī)?lái)一篇無(wú)阻塞加載js,防止因js加載不了影響頁(yè)面顯示的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)2016-12-12JS使用插件cryptojs進(jìn)行加密解密數(shù)據(jù)實(shí)例
這篇文章主要介紹了JS使用插件cryptojs進(jìn)行加密解密數(shù)據(jù),結(jié)合完整實(shí)例形式分析了javascript基于加密插件實(shí)現(xiàn)加密解密功能的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05JavaScript使用Promise控制并發(fā)請(qǐng)求
當(dāng)我們需要同時(shí)處理多個(gè)請(qǐng)求時(shí),如何避免請(qǐng)求之間的沖突和混亂呢,這就是今天我們要探討的話題——如何使用Promise控制并發(fā)請(qǐng)求,感興趣的可以了解一下2023-06-06javascript瀑布流式圖片懶加載實(shí)例解析與優(yōu)化
這篇文章主要針對(duì)javascript瀑布流式圖片懶加載實(shí)例進(jìn)行解析與優(yōu)化,感興趣的小伙伴們可以參考一下2016-02-02JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)易的計(jì)算器實(shí)例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)易的計(jì)算器實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧2018-05-05如何解決日期函數(shù)new Date()瀏覽器兼容性問(wèn)題
這篇文章主要介紹了如何解決日期函數(shù)new Date()瀏覽器兼容性問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09ajax前臺(tái)后臺(tái)跨域請(qǐng)求處理方式
本篇文章通過(guò)前臺(tái)跨域請(qǐng)求處理以及后臺(tái)跨域的數(shù)據(jù)處理方式介紹,詳細(xì)分析了ajax跨域的問(wèn)題,對(duì)此有需要的朋友學(xué)習(xí)下。2018-02-02