国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript的setTimeout()使用閉包特性時(shí)需要注意的問題

2019-11-20 14:06:57
字體:
供稿:網(wǎng)友

setTimeout經(jīng)常被用于延遲執(zhí)行某個(gè)函數(shù),用法為:

復(fù)制代碼 代碼如下:

setTimeout(function(){

}, timeout);

有時(shí)為了進(jìn)行異步處理,而使用setTimeout(function…,0);比如:

復(fù)制代碼 代碼如下:

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

 在setTimeout設(shè)定的函數(shù)處理器之前,函數(shù)f返回;

在使用異步處理時(shí),尤其是使用閉包特性時(shí),要特別小心;

例如:

復(fù)制代碼 代碼如下:

for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}

對于初次使用這種方式的同學(xué)來說,很可能會認(rèn)為程序會打印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í)也是利用了閉包):

復(fù)制代碼 代碼如下:

for(var i = 0 ; i < 10; i++){
setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 独山县| 达日县| 吉木乃县| 丰顺县| 诸城市| 阿巴嘎旗| 东山县| 汉阴县| 浮梁县| 日照市| 汉阴县| 温州市| 金沙县| 湟中县| 昌平区| 峨眉山市| 牟定县| 大新县| 辉县市| 潢川县| 大安市| 金沙县| 通州市| 区。| 抚州市| 尼玛县| 织金县| 安龙县| 恩平市| 随州市| 咸丰县| 三明市| 南涧| 元氏县| 枣庄市| 营山县| 娱乐| 凤阳县| 梨树县| 洪洞县| 永川市|