摘要:?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
摘要:前言最近在學(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)...
摘要:什么是裝飾器模式向一個(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ì)...
摘要:廣義說(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()是...
摘要:廣義說(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()是...
閱讀 1774·2021-09-28 09:43
閱讀 1123·2021-09-23 11:22
閱讀 2738·2021-09-14 18:05
閱讀 1832·2019-08-30 15:52
閱讀 2824·2019-08-30 10:55
閱讀 2020·2019-08-29 16:58
閱讀 1333·2019-08-29 16:37
閱讀 3045·2019-08-29 16:25