欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決循環(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ù)的時候,其實 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)文章

  • JS正則表達(dá)式比較常見用法

    JS正則表達(dá)式比較常見用法

    本文給大家介紹JS正則表達(dá)式比較常見用法,涉及到j(luò)s正則表達(dá)式用法相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • JS實現(xiàn)元素的拖動與占位功能

    JS實現(xiàn)元素的拖動與占位功能

    這篇文章主要介紹了JS實現(xiàn)元素的拖動與占位功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 實用javaScript技術(shù)-屏蔽類

    實用javaScript技術(shù)-屏蔽類

    實用javaScript技術(shù)-屏蔽類...
    2006-08-08
  • JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個技巧

    JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個技巧

    這篇文章主要介紹了JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個技巧,JavaScript引擎是執(zhí)行 JavaScript 代碼的程序或解釋器。JavaScript引擎可以實現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將JavaScript編譯為字節(jié)碼的即時編譯器。,需要的朋友可以參考下
    2019-06-06
  • 微信小程序利用co處理異步流程的方法教程

    微信小程序利用co處理異步流程的方法教程

    最近在學(xué)習(xí)微信小程序,下面就學(xué)習(xí)的內(nèi)容進(jìn)行總結(jié),這篇文章主要給大家介紹了關(guān)于微信小程序利用co處理異步流程的方法,文中給出了詳細(xì)的介紹和示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-05-05
  • js 目錄列舉函數(shù)

    js 目錄列舉函數(shù)

    用js獲取文件目錄的代碼,一般主要是用了區(qū)別vbs的一些代碼
    2008-11-11
  • JS 自定義函數(shù)缺省值的設(shè)置方法

    JS 自定義函數(shù)缺省值的設(shè)置方法

    有時候定義的函數(shù)需要設(shè)置默認(rèn)值,因為不帶就會出現(xiàn)一些錯誤,大家可以參考下這里默認(rèn)值的定義方法。
    2010-05-05
  • 原生javascript實現(xiàn)自動更新的時間日期

    原生javascript實現(xiàn)自動更新的時間日期

    這篇文章主要介紹了原生javascript實現(xiàn)自動更新的時間日期的相關(guān)資料,對實現(xiàn)代碼進(jìn)行詳細(xì)分析,感興趣的朋友可以參考一下
    2016-02-02
  • javascript 瀏覽器類型和版本號檢測代碼(兼容多瀏覽器)

    javascript 瀏覽器類型和版本號檢測代碼(兼容多瀏覽器)

    果對javascript了解不是特別深入的話,很容易就會寫出不兼容的代碼(就像我),這時候就得判斷瀏覽器了。比如事件偵聽、一些鼠標(biāo)和鍵盤事件、Range等,一些都會不一樣.下面列出幾種常用的檢測瀏覽器方法,以饗觀眾!
    2010-04-04
  • 用cssText批量修改樣式

    用cssText批量修改樣式

    一般情況下我們用js設(shè)置元素對象的樣式會使用這樣的形式
    2009-08-08

最新評論