Javascript的setTimeout()使用閉包特性時需要注意的問題
setTimeout經(jīng)常被用于延遲執(zhí)行某個函數(shù),用法為:
setTimeout(function(){
…
}, timeout);
有時為了進行異步處理,而使用setTimeout(function…,0);比如:
function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);
return …;
}
在setTimeout設(shè)定的函數(shù)處理器之前,函數(shù)f返回;
在使用異步處理時,尤其是使用閉包特性時,要特別小心;
例如:
for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}
對于初次使用這種方式的同學(xué)來說,很可能會認為程序會打印0…9,可結(jié)果確實打印10個10;
問題就在于,當(dāng)循環(huán)完成時,function得到執(zhí)行,而i已經(jīng)變成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);
}
相關(guān)文章
利用JavaScript實現(xiàn)繪制2023新年煙花的示例代碼
大家過年好!新春佳節(jié),在這個充滿喜悅的日子里,愿新年的鐘聲帶給你一份希望和期待。在這喜慶的日子里,小編和大家分享一個煙花代碼,希望大家能夠喜歡2023-01-01
javascript設(shè)計模式 – 模板方法模式原理與用法實例分析
這篇文章主要介紹了javascript設(shè)計模式 – 模板方法模式原理,結(jié)合實例形式分析了javascript模板方法模式相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下2020-04-04
JS實現(xiàn)生成由字母與數(shù)字組合的隨機字符串功能詳解
這篇文章主要介紹了JS實現(xiàn)生成由字母與數(shù)字組合的隨機字符串功能,結(jié)合實例形式詳細分析了JavaScript生成隨機字符串的方法及相關(guān)優(yōu)化操作技巧,需要的朋友可以參考下2018-05-05
pnpm install:ERR_PNPM_PEER_DEP_ISSUES Unmet p
這篇文章主要為大家介紹了pnpm install:ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies報錯解決2023-06-06

