日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案

瀏覽:173日期:2024-03-28 14:29:37
概述

我們先來(lái)簡(jiǎn)單了解一下setTimeout延時(shí)器的運(yùn)行機(jī)制。setTimeout會(huì)先將回調(diào)函數(shù)放到等待隊(duì)列中,等待區(qū)域內(nèi)其他主程序執(zhí)行完畢后,按時(shí)間順序先進(jìn)先出執(zhí)行回調(diào)函數(shù)。本質(zhì)上是作用域的問(wèn)題。

因此若是這樣將不會(huì)得到想要的結(jié)果輸出1.2.3.4.5,而會(huì)連續(xù)輸出5個(gè)6。

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

這是因?yàn)閟etTimeout是異步執(zhí)行,每一次for循環(huán)的時(shí)候,setTimeout都執(zhí)行一次,但是里面的函數(shù)沒(méi)有被執(zhí)行,而是被放到了任務(wù)隊(duì)列里,等待執(zhí)行。只有主線上的任務(wù)執(zhí)行完,才會(huì)執(zhí)行任務(wù)隊(duì)列里的任務(wù)。也就是說(shuō)它會(huì)等到for循環(huán)全部運(yùn)行完畢后,才會(huì)執(zhí)行fun函數(shù),但是當(dāng)for循環(huán)結(jié)束后此時(shí)i的值已經(jīng)變成了6,因此雖然定時(shí)器跑了5秒,控制臺(tái)上的內(nèi)容依然是6。

(注意:for循環(huán)從開(kāi)始到結(jié)束的過(guò)程,需要維持幾微秒或幾毫秒,當(dāng)定時(shí)器跑完一秒之后for循環(huán)早已經(jīng)做完了。)

我們來(lái)看另一種情況:

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

由setTimeout的運(yùn)行機(jī)制可以知道,首先會(huì)運(yùn)行外部的所有主程序,雖然for循環(huán)內(nèi)形成了閉包,但是fun并沒(méi)有發(fā)現(xiàn)一個(gè)實(shí)參所以跟第一個(gè)例子并無(wú)實(shí)際差別,仍然是連續(xù)輸出5個(gè)6。

解決方案1:閉包

使用閉包是很經(jīng)典的一種做法:

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

我們可以發(fā)現(xiàn)跟預(yù)期結(jié)果一致,依次輸出1到5,因是因?yàn)閷?shí)際參數(shù)跟定時(shí)器內(nèi)部的i有強(qiáng)依賴。

通過(guò)閉包,將i的變量駐留在內(nèi)存中,當(dāng)輸出j時(shí),引用的是外部函數(shù)的變量值i,i的值是根據(jù)循環(huán)來(lái)的,執(zhí)行setTimeout時(shí)已經(jīng)確定了里面的的輸出了。

解決方案2:拆分結(jié)構(gòu)

我們還可以將setTimeout的定義和調(diào)用分別放到不同部分:

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

控制臺(tái)上輸出依然是依次輸出1到5。

解決方案3:let

這里再來(lái)說(shuō)一說(shuō)使用es6的let來(lái)解決此問(wèn)題:

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

這個(gè)例子與第一個(gè)相比,只是把var更改成了let,可是控制臺(tái)的結(jié)果卻是依次輸出1到5。

因?yàn)閒or循環(huán)頭部的let不僅將i綁定到for循環(huán)中,事實(shí)上它將其重新綁定到循環(huán)體的每一次迭代中,確保上一次迭代結(jié)束的值重新被賦值。setTimeout里面的function()屬于一個(gè)新的域,通過(guò)var定義的變量是無(wú)法傳入到這個(gè)函數(shù)執(zhí)行域中的,通過(guò)使用let來(lái)聲明塊變量能作用于這個(gè)塊,所以function就能使用i這個(gè)變量了;這個(gè)匿名函數(shù)的參數(shù)作用域和for參數(shù)的作用域不一樣,是利用了這一點(diǎn)來(lái)完成的。這個(gè)匿名函數(shù)的作用域有點(diǎn)類似類的屬性,是可以被內(nèi)層方法使用的。

解決方案4:setTimeout第三個(gè)參數(shù)

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

由于每次傳入的參數(shù)是從for循環(huán)里面取到的值,所以會(huì)依次輸出1到5。

以上就是JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案的詳細(xì)內(nèi)容,更多關(guān)于JS使用setTimeout的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
动漫av一区| 天堂俺去俺来也www久久婷婷| 91精品国产经典在线观看| 亚洲+小说+欧美+激情+另类| 日韩精品社区| 日本一区二区中文字幕| 国产伦理久久久久久妇女| 免费精品一区| 久久免费黄色| 欧美中文日韩| 国产精品一区二区三区美女| 国产成人精品免费视| 免费成人网www| 日韩国产欧美三级| 日韩综合一区| 亚洲一区二区免费看| 日本aⅴ免费视频一区二区三区| 欧美激情福利| 久久中文视频| 日本在线成人| 成午夜精品一区二区三区软件| 91精品精品| 三级久久三级久久久| 国产一区二区三区四区二区| 午夜日韩福利| 国产精品一区二区美女视频免费看 | 99久久激情| 蜜臀久久99精品久久久久宅男| 久久精品av麻豆的观看方式| 狠狠躁少妇一区二区三区| 在线亚洲国产精品网站| 国产伦理一区| 亚洲经典在线| 久久av国产紧身裤| 欧美精品激情| 日本欧美国产| 日韩综合小视频| 亚洲综合在线电影| 欧美一区91| 午夜国产精品视频免费体验区| 国产精品啊啊啊| 99在线|亚洲一区二区| 国产精品99精品一区二区三区∴ | 91视频精品| 日韩精品一区二区三区中文在线| 精品国产免费人成网站| 免费人成精品欧美精品| 精品99在线| 综合欧美精品| 国产99亚洲| 精品久久91| 91大神在线观看线路一区| 视频一区中文| xxxxx性欧美特大| 欧美日韩一区二区三区四区在线观看| 美女毛片一区二区三区四区 | 亚洲人妖在线| 欧美 日韩 国产一区二区在线视频 | 亚洲手机视频| 精品国产99| 91成人精品在线| 免费在线欧美视频| 999国产精品| 成人污污视频| 国产伦一区二区三区| 午夜电影一区| 免费不卡在线观看| 久久久蜜桃一区二区人| 国产精品大片免费观看| 蜜桃久久av一区| 狠狠久久婷婷| 国产一区清纯| 成人羞羞视频在线看网址| 久久国产精品美女| 91大神在线观看线路一区| 综合一区在线| 视频一区二区中文字幕| 亚洲激情中文| 午夜国产精品视频| 中文在线一区| 亚洲欧美日韩高清在线| 亚洲韩日在线| 亚洲精品中文字幕乱码| 私拍精品福利视频在线一区| 天堂av在线| 超碰超碰人人人人精品| 国产一区二区亚洲| 国产99在线| 日韩国产在线| 久久蜜桃av| 9色精品在线| 亚洲欧洲日本mm| 亚洲一区成人| 中文视频一区| 亚洲不卡视频| 91欧美精品| 国产精品观看| 97在线精品| 国产综合色区在线观看| 91精品一区国产高清在线gif| 久久精品亚洲人成影院| 国内精品福利| 亚洲精品高潮| 国产精品久久| 捆绑调教日本一区二区三区| 亚洲二区免费| 丝袜美腿一区二区三区| 日韩国产欧美在线播放| 欧美国产先锋| 婷婷激情一区| 只有精品亚洲| 麻豆国产精品777777在线| 色偷偷色偷偷色偷偷在线视频| 日韩av一级| 日韩在线卡一卡二| 国产乱码精品一区二区三区亚洲人 | 久久wwww| 久久久久久一区二区| 欧洲在线一区| 免费人成在线不卡| 国产高清日韩| 1000部精品久久久久久久久| 免费看日韩精品| 久久只有精品| 日韩欧美字幕| 男女性色大片免费观看一区二区| 国产亚洲欧美日韩精品一区二区三区 | 在线天堂中文资源最新版| 亚洲精品中文字幕乱码| 日本少妇精品亚洲第一区| 久久精品国产999大香线蕉| 99精品综合| 国产图片一区| 日韩免费小视频| 亚洲精品在线二区| 成人污污视频| 中文一区一区三区免费在线观| 欧美日本三区| 精品日韩视频| 日韩黄色免费网站| 色黄视频在线观看| 日本亚洲视频在线| 国产v综合v| 国产日韩一区二区三免费高清| 日韩精品不卡一区二区| 亚洲欧美在线综合| 亚洲国产成人二区| 亚洲永久精品唐人导航网址| 成人影视亚洲图片在线| 影音先锋久久精品| 日韩在线观看一区| 欧美日本不卡| 亚洲午夜精品久久久久久app| 久久国内精品自在自线400部| 激情综合激情| 免费在线观看一区| 美女国产一区| av亚洲一区二区三区| 日本免费在线视频不卡一不卡二| 亚洲成人精品| 精品一区二区三区中文字幕| 中文字幕一区二区三区日韩精品 | 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美激情五月| 中文字幕中文字幕精品| 日韩毛片在线| 美女国产一区二区三区| 免费人成网站在线观看欧美高清| 国产一区二区三区网| 色综合视频一区二区三区日韩| 丝袜av一区| 国语对白精品一区二区| 欧美欧美黄在线二区| 在线精品观看| 亚洲欧美久久久| 国产一区观看| 亚洲精品.com| 日产午夜精品一线二线三线| 国产精品观看| 欧美日韩一区二区三区不卡视频 | 福利片在线一区二区| 日韩精品第二页| 日韩一区精品视频| 黄色成人精品网站| 99久久久久国产精品| 亚洲欧洲美洲av| 国产自产自拍视频在线观看 | 成人午夜网址| 麻豆国产精品视频| 亚洲精品乱码| 中文字幕成人| 亚洲狼人精品一区二区三区| 美女久久网站| 深夜福利亚洲| 亚洲精品影院在线观看| 亚洲精品福利| 欧美日韩一区二区国产| 日韩av网站在线免费观看| 日韩一区精品| 99视频在线精品国自产拍免费观看|