成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對(duì)JS中settimeout的一些認(rèn)識(shí)

IntMain / 3291人閱讀

摘要:?jiǎn)尉€程首先是單線程,任務(wù)隊(duì)列采用先進(jìn)先出,因此前面的任務(wù)不執(zhí)行完,后面的任務(wù)是無(wú)法執(zhí)行的,會(huì)造成阻塞。以前我一直認(rèn)為如果后面的參數(shù)為,那么兩秒后該函數(shù)就會(huì)執(zhí)行??蓪?shí)際上并不是這樣。

單線程

首先js是單線程,任務(wù)隊(duì)列采用“先進(jìn)先出”,因此前面的任務(wù)不執(zhí)行完,后面的任務(wù)是無(wú)法執(zhí)行的,會(huì)造成阻塞。

setTimeout函數(shù)

我們都知道該函數(shù)接受兩個(gè)參數(shù),第一個(gè)參數(shù)為字符串或者函數(shù),第二個(gè)為延遲的時(shí)間,單位為毫秒。以前我一直認(rèn)為如果后面的參數(shù)為2000,那么兩秒后該函數(shù)就會(huì)執(zhí)行??蓪?shí)際上并不是這樣。你應(yīng)該這樣理解,settimeout函數(shù)是在指定的延遲時(shí)間后,將該任務(wù)加入到j(luò)s的任務(wù)隊(duì)列中,具體執(zhí)行的時(shí)間取決于任務(wù)隊(duì)列中位于該任務(wù)前面所有任務(wù)的執(zhí)行時(shí)間。

let a = 1;
settimeout(function(){
  console.log(1111);
},1000);
while(a>0){
 a++
}

以上代碼永遠(yuǎn)也不會(huì)輸出1111。1s后任務(wù)加入到任務(wù)隊(duì)列,因?yàn)榍懊媸撬姥h(huán),永遠(yuǎn)也執(zhí)行不完,所以后面的語(yǔ)句無(wú)法執(zhí)行。如果延遲時(shí)間為0,會(huì)出現(xiàn)什么狀況?

setTimeout(function(){
  console.log(1111);
},0);
fun one();

即使延遲變?yōu)?,也是先執(zhí)行fun one()函數(shù),然后輸出1111。

那么問(wèn)題來(lái)了,在延遲為0的情況下,fun one()執(zhí)行100遍,結(jié)果會(huì)是怎么樣的?

setTimeout(function(){
  console.log(1111);
},0);
fun one();
fun one();
fun one();
fun one();
...

不管后面有多少個(gè)函數(shù),setTimeout里面的函數(shù)總是最后執(zhí)行,即使延遲為0。有點(diǎn)奇怪,延遲參數(shù)設(shè)為0,也要排到后面。

最后需要說(shuō)的一點(diǎn)就是,setTimeout函數(shù)用的是eval()函數(shù),如果傳入字符串,會(huì)被解析為函數(shù)語(yǔ)句執(zhí)行,但是這存在一定的風(fēng)險(xiǎn),所以setTimeout最好是傳入函數(shù),而不是字符串。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84701.html

相關(guān)文章

  • 由兩道題擴(kuò)展對(duì)作用域,作用域鏈,閉包,立即執(zhí)行函數(shù),匿名函數(shù)認(rèn)識(shí)總結(jié)

    摘要:前言最近在學(xué)前幾天看到兩道題剛開(kāi)始看懵懵懂懂這幾天通過(guò)各種查資料慢慢的理解頓悟了對(duì)匿名函數(shù)閉包立即執(zhí)行函數(shù)的理解也更深了一點(diǎn)在此分享給大家我的理解與總結(jié)希望能幫助大家理解因?yàn)檫@篇文章是我用心總結(jié)的查閱了很多的資料所以總結(jié)的比較細(xì)篇幅較長(zhǎng)如果 前言 最近在學(xué)JS,前幾天看到兩道題,剛開(kāi)始看懵懵懂懂,這幾天通過(guò)各種查資料,慢慢的理解,頓悟了,對(duì)匿名函數(shù),閉包,立即執(zhí)行函數(shù)的理解也更深了一點(diǎn)...

    piapia 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式: 裝飾器模式

    摘要:什么是裝飾器模式向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)的設(shè)計(jì)模式被稱為裝飾器模式,它是作為現(xiàn)有的類的一個(gè)包裝。中的裝飾器模式中有一個(gè)的提案,使用一個(gè)以開(kāi)頭的函數(shù)對(duì)中的及其屬性方法進(jìn)行修飾。 1 什么是裝飾器模式 showImg(https://segmentfault.com/img/remote/1460000015970102?w=1127&h=563); 向一個(gè)現(xiàn)有的對(duì)...

    wendux 評(píng)論0 收藏0
  • JS動(dòng)畫(huà)之定時(shí)器詳解

    摘要:廣義說(shuō)一切通過(guò)改變的視覺(jué)呈現(xiàn)都叫動(dòng)畫(huà)例如,按鈕,鏈接等元素交互反饋。狹義說(shuō)通過(guò)定時(shí)器連續(xù)調(diào)用函數(shù)進(jìn)行元素屬性改變產(chǎn)生的視覺(jué)動(dòng)畫(huà)效果。 廣義說(shuō):一切通過(guò)js改變的視覺(jué)呈現(xiàn)都叫動(dòng)畫(huà);例如,按鈕,鏈接等元素交互反饋。狹義說(shuō):通過(guò)定時(shí)器連續(xù)調(diào)用js函數(shù)進(jìn)行元素屬性改變產(chǎn)生的視覺(jué)動(dòng)畫(huà)效果。 定時(shí)器 定時(shí)器是JavaScript動(dòng)畫(huà)的核心技術(shù);setTimeout(),setInterval()是...

    justjavac 評(píng)論0 收藏0
  • JS動(dòng)畫(huà)之定時(shí)器詳解

    摘要:廣義說(shuō)一切通過(guò)改變的視覺(jué)呈現(xiàn)都叫動(dòng)畫(huà)例如,按鈕,鏈接等元素交互反饋。狹義說(shuō)通過(guò)定時(shí)器連續(xù)調(diào)用函數(shù)進(jìn)行元素屬性改變產(chǎn)生的視覺(jué)動(dòng)畫(huà)效果。 廣義說(shuō):一切通過(guò)js改變的視覺(jué)呈現(xiàn)都叫動(dòng)畫(huà);例如,按鈕,鏈接等元素交互反饋。狹義說(shuō):通過(guò)定時(shí)器連續(xù)調(diào)用js函數(shù)進(jìn)行元素屬性改變產(chǎn)生的視覺(jué)動(dòng)畫(huà)效果。 定時(shí)器 定時(shí)器是JavaScript動(dòng)畫(huà)的核心技術(shù);setTimeout(),setInterval()是...

    vvpvvp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<