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