麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > JavaScript > 正文

setTimeout和setInterval的深入理解

2019-11-20 21:45:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
大概半年前發(fā)表過(guò)一篇關(guān)于setTimeout和setInterval的文章,但是現(xiàn)在回去仔細(xì)一看發(fā)現(xiàn)其實(shí)存在很多不足以及錯(cuò)誤。事實(shí)上,setTimeout和setInterval并沒(méi)有我們字面上理解的那么簡(jiǎn)單。要真正掌握并理解這兩個(gè)方法,還得從javascript的單線程機(jī)制說(shuō)起。

【開門見山】setTimeout和setInterval是如何工作的呢?
我們知道,js是單線程執(zhí)行的。所以其實(shí)setTimeout和setInterval所謂的“異步調(diào)用”事實(shí)上是通過(guò)將代碼段插入到代碼的執(zhí)行隊(duì)列中實(shí)現(xiàn)的。

而如何計(jì)算插入的時(shí)間點(diǎn)呢?自然是要用到我們所說(shuō)的timer,也就是計(jì)時(shí)器。當(dāng)執(zhí)行setTimeout和setInterval的時(shí)候,timer會(huì)根據(jù)你設(shè)定的時(shí)間“準(zhǔn)確”地找到代碼的插入點(diǎn)。當(dāng)隊(duì)列“正常”地執(zhí)行到插入點(diǎn)時(shí),就觸發(fā)timer callback,也就是我們?cè)O(shè)定的回調(diào)函數(shù):
復(fù)制代碼 代碼如下:

function fn() {
/*
here is some codes
*/
setTimeout(function() {alert('ok!')},1000);
}

上面這個(gè)例子就是我們通常的用法,應(yīng)該容易理解。可是,timer真的能那么準(zhǔn)確么?代碼隊(duì)列的執(zhí)行真的能那么正常么?

【斬草除根】重新認(rèn)識(shí)所謂的“異步”
剛剛已經(jīng)知道,事實(shí)上setTimeout和setInterval只是簡(jiǎn)簡(jiǎn)單單地通過(guò)插入代碼到代碼隊(duì)列來(lái)實(shí)現(xiàn)代碼的延遲執(zhí)行(或者說(shuō)異步執(zhí)行)。但是事實(shí)上所謂的異步只是一個(gè)假象――它同樣運(yùn)行在一個(gè)線程上!
那么問(wèn)題就來(lái)了,要是在代碼插入點(diǎn)前的代碼執(zhí)行時(shí)間超過(guò)了傳入setTimeout或setInterval的設(shè)定時(shí)間會(huì)怎樣呢?讓我們來(lái)看看這段代碼:
復(fù)制代碼 代碼如下:

function fn() {
setTimeout(function(){alert('can you see me?');},1000);
while(true) {}
}

你覺得這段代碼的執(zhí)行結(jié)果是什么呢?答案是,alert永遠(yuǎn)不會(huì)出現(xiàn)。
這是為什么呢?因?yàn)椋瑆hile這段代碼沒(méi)有執(zhí)行完,插入在后面的代碼便永遠(yuǎn)不會(huì)執(zhí)行。
綜上所述,其實(shí)JS終歸是單線程產(chǎn)物。無(wú)論如何“異步”都不可能突破單線程這個(gè)障礙。所以許多的“異步調(diào)用”(包括Ajax)事實(shí)上也只是“偽異步”而已。只要理解了這么一個(gè)概念,也許理解setTimeout和setInterval也就不難了。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美性生视频 | 黄色片免费看看 | 欧美日韩在线中文字幕 | 黄色片视频观看 | 久久久久久久久久久一区 | 在线 日本 制服 中文 欧美 | 毛片免费观看完整版 | 欧美精品欧美极品欧美激情 | 久久精品网址 | 午夜视频你懂的 | 久久久婷婷一区二区三区不卡 | 成人毛片av在线 | 精品成人国产在线观看男人呻吟 | 一级电影免费 | 亚洲特黄妇女高潮 | 欧美顶级毛片在线播放小说 | 久久欧美亚洲另类专区91大神 | 女人久久久www免费人成看片 | 男女羞羞视频 | 91精品国产综合久久久欧美 | 国产精品一区在线免费观看 | 九九热免费观看 | 日本不卡视频在线观看 | 免费专区 - 91爱爱 | 国产精品视频导航 | 日本免费不卡一区二区 | 成人在线免费观看网址 | 日韩a毛片免费观看 | 91 视频网站 | 天堂福利电影 | 国产午夜精品一区二区三区视频 | 久久久裸体视频 | 久久免费视频1 | 久久久成人一区二区免费影院 | 日韩a毛片免费观看 | 天天草天天干天天 | 国产精品亚洲一区二区三区在线观看 | 国产一国产一级毛片视频 | 一级毛片免费高清视频 | 91成人一区 | 成人精品一区二区三区中文字幕 |