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

首頁 > 開發 > JS > 正文

解決循環中setTimeout執行順序的問題

2024-05-06 16:44:57
字體:
來源:轉載
供稿:網友

期望:開始輸出一個0,然后每隔一秒依次輸出1,2,3,4。

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

結果:輸出5。

原因:setTimeout 使函數延遲1s執行,而for循環執行完成還不到0.1秒,到執行函數的時候,其實 i 已經變成5了,因此console.log(i)輸出5。

解決方法一:使用let塊作用域。

for (let i = 0; i < 5; i++) {   setTimeout(function() {    console.log(i);  }, 1000 * i); } 

解決方法二:加個閉包。

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

結果:開始輸出一個0,然后每隔一秒依次輸出1,2,3,4。

失敗方法:

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

結果:輸出 5。

原因:去掉函數的參數i,則函數內部沒有對i保持引用。

解決方法三:

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

結果:立馬輸出0-4。

原因:setTimeout可以接受函數或者字符串作為參數,而給setTimeout傳遞了一個立即執行函數,該立即執行函數是undefined ,也就是說等價于setTimeout(undefined, ...)。立即執行函數會立即執行。

以上這篇解決循環中setTimeout執行順序的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开江县| 彩票| 西乌珠穆沁旗| 陇南市| 澄迈县| 海口市| 兴业县| 昭平县| 平度市| 多伦县| 神木县| 石河子市| 冕宁县| 子长县| 惠州市| 红原县| 清远市| 内江市| 峡江县| 静安区| 丹阳市| 涟水县| 洛阳市| 张北县| 遂平县| 普兰店市| 万源市| 杭锦后旗| 蒲江县| 盈江县| 尼木县| 罗甸县| 吉木萨尔县| 沙雅县| 疏勒县| 大渡口区| 庆云县| 长宁县| 梅河口市| 涟水县| 新建县|