js面試小筆記

每天記錄一點(diǎn)點(diǎn)....

setTimeout

面試官:“你知道定時(shí)器嗎?”我:“知道”面試官:“那你說(shuō)說(shuō)什么是定時(shí)器”我:“定時(shí)器是可以用setTimeout來(lái)實(shí)現(xiàn)的”面試官:“setTimeout(function () { console.log("1") },0);console.log("2");那你說(shuō)說(shuō)控制臺(tái)上輸出順序是什么识补?”

console.log('a');
    setTimeout(function(){
    console.log('b');
},0);
console.log('c');
console.log('d');

控制臺(tái)輸出:
a
c
d
b
我也不截圖了族淮。 知道為什么嗎,理論上他延遲時(shí)間為0不是應(yīng)該馬上執(zhí)行嗎凭涂,不是的祝辣。因?yàn)閟etTimeout運(yùn)行機(jī)制說(shuō)過(guò),必須要等到當(dāng)前腳本的同步任務(wù)和“任務(wù)隊(duì)列”中已有的事件切油,全部處理完以后蝙斜,才會(huì)執(zhí)行setTimeout指定的任務(wù)。也就是說(shuō)澎胡,setTimeout的真正作用是孕荠,在“任務(wù)隊(duì)列”的現(xiàn)有事件的后面再添加一個(gè)事件,規(guī)定在指定時(shí)間執(zhí)行某段代碼攻谁。setTimeout添加的事件稚伍,會(huì)在下一次Event Loop執(zhí)行。好吧戚宦,對(duì)事件循環(huán)不清楚的推薦看看阮一峰-avaScript 運(yùn)行機(jī)制詳解
原文鏈接:https://juejin.im/post/5aa4c47af265da239866e236

promise

打印以下程序的輸出:

new Promise(resolve => {
    console.log(1);
    resolve(3);
}).then(num => {
    console.log(num)
});
console.log(2)

這道題的輸出是123个曙,為什么不是132呢?因?yàn)槲乙恢崩斫釶romise是沒有異步功能受楼,它只是幫忙解決異步回調(diào)的問(wèn)題垦搬,實(shí)質(zhì)上是和回調(diào)是一樣的,所以如果按照這個(gè)想法艳汽,resolve之后應(yīng)該會(huì)立刻then猴贰。但實(shí)際上并不是。難道用了setTimeout河狐?如果在promise里面再加一個(gè)promise:

new Promise(resolve => {
    console.log(1);
    resolve(3);
    Promise.resolve().then(()=> console.log(4))
}).then(num => {
    console.log(num)
});
console.log(2)

執(zhí)行順序是1243米绕,第二個(gè)Promise的順序會(huì)比第一個(gè)的早,所以直觀來(lái)看也是比較奇怪甚牲,這是為什么呢义郑?

Promise的實(shí)現(xiàn)有很多庫(kù)蝶柿,有jQuery的deferred丈钙,還有很多提供polyfill的,如es6-promise交汤,lie等雏赦,它們的實(shí)現(xiàn)都基于Promise/A+標(biāo)準(zhǔn)劫笙,這也是ES6的Promise采用的。

為了回答上面題目的執(zhí)行順序問(wèn)題星岗,必須得理解Promise是怎么實(shí)現(xiàn)的填大,所以得看那些庫(kù)是怎么實(shí)現(xiàn)的,特別是我錯(cuò)誤地認(rèn)為不存在的Promise的異步是怎么實(shí)現(xiàn)的俏橘,因?yàn)樽詈笠恍械腸onsole.log(2)它并不是最后執(zhí)行的允华,那么必定有某些類似于setTimeout的異步機(jī)制讓上面同步的代碼在異步執(zhí)行,所以它才能在代碼執(zhí)行完了之后才執(zhí)行寥掐。

原文鏈接 (更詳細(xì)的解釋):https://juejin.im/post/5aa3f7b9f265da23766ae5ae

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末靴寂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子召耘,更是在濱河造成了極大的恐慌百炬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件污它,死亡現(xiàn)場(chǎng)離奇詭異剖踊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)衫贬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門德澈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人固惯,你說(shuō)我怎么就攤上這事圃验。” “怎么了缝呕?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵澳窑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我供常,道長(zhǎng)摊聋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任栈暇,我火速辦了婚禮麻裁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘源祈。我一直安慰自己煎源,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布香缺。 她就那樣靜靜地躺著手销,像睡著了一般。 火紅的嫁衣襯著肌膚如雪图张。 梳的紋絲不亂的頭發(fā)上锋拖,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天诈悍,我揣著相機(jī)與錄音,去河邊找鬼兽埃。 笑死侥钳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柄错。 我是一名探鬼主播舷夺,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼售貌!你這毒婦竟也來(lái)了冕房?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤趁矾,失蹤者是張志新(化名)和其女友劉穎耙册,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫捣,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡详拙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔓同。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饶辙。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖斑粱,靈堂內(nèi)的尸體忽然破棺而出弃揽,到底是詐尸還是另有隱情,我是刑警寧澤则北,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布鹏溯,位于F島的核電站辈毯,受9級(jí)特大地震影響瓷产,放射性物質(zhì)發(fā)生泄漏摆出。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一快骗、第九天 我趴在偏房一處隱蔽的房頂上張望娜庇。 院中可真熱鬧,春花似錦方篮、人聲如沸名秀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匕得。三九已至,卻和暖如春蜈垮,著一層夾襖步出監(jiān)牢的瞬間耗跛,已是汗流浹背裕照。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工攒发, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留调塌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓惠猿,卻偏偏與公主長(zhǎng)得像羔砾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偶妖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 弄懂js異步 講異步之前姜凄,我們必須掌握一個(gè)基礎(chǔ)知識(shí)-event-loop。 我們知道JavaScript的一大特點(diǎn)...
    DCbryant閱讀 2,711評(píng)論 0 5
  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案趾访,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,706評(píng)論 1 56
  • 歡迎閱讀專門探索 JavaScript 及其構(gòu)建組件的系列文章的第四章态秧。 在識(shí)別和描述核心元素的過(guò)程中,我們還分享...
    OSC開源社區(qū)閱讀 1,152評(píng)論 1 10
  • 特點(diǎn) Promise能將回調(diào)分離出來(lái),在異步操作執(zhí)行之后,用鏈?zhǔn)椒椒▓?zhí)行回調(diào),雖然es5用封裝函數(shù)也能實(shí)現(xiàn),但是如...
    一二三kkxx閱讀 619評(píng)論 0 1
  • 隨著論文答辯完扼鞋,基本算是畢業(yè)了申鱼。
    秦王逢考必過(guò)閱讀 187評(píng)論 0 0