最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決循環(huán)中setTimeout執(zhí)行順序的問題

 更新時間:2018年06月20日 14:15:57   作者:筱葭  
今天小編就為大家分享一篇解決循環(huán)中setTimeout執(zhí)行順序的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

結(jié)果:輸出5。

原因:setTimeout 使函數(shù)延遲1s執(zhí)行,而for循環(huán)執(zhí)行完成還不到0.1秒,到執(zhí)行函數(shù)的時候,其實(shí) i 已經(jīng)變成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); 
} 

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

失敗方法:

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

結(jié)果:輸出 5。

原因:去掉函數(shù)的參數(shù)i,則函數(shù)內(nèi)部沒有對i保持引用。

解決方法三:

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

結(jié)果:立馬輸出0-4。

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

以上這篇解決循環(huán)中setTimeout執(zhí)行順序的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

新昌县| 共和县| 仪征市| 龙泉市| 海宁市| 类乌齐县| 绥江县| 晋州市| 东安县| 庄河市| 江孜县| 乌海市| 南靖县| 巴南区| 宣恩县| 玉林市| 平罗县| 怀安县| 临泽县| 沙雅县| 嘉禾县| 边坝县| 措勤县| 尼木县| 腾冲县| 蒲江县| 泰顺县| 崇仁县| 龙州县| 鹰潭市| 南汇区| 定兴县| 仁布县| 三穗县| 琼中| 隆德县| 平顶山市| 沛县| 蒲江县| 察哈| 汉中市|