js面試題整理

因?yàn)榻梃b的文章比較多加上個(gè)人理解整理交煞,沒(méi)有備注來(lái)源。如侵權(quán)比刪斟或!

一素征、js的數(shù)據(jù)類型

ES5的5種:

基本數(shù)據(jù)類型: Number、 String萝挤、 Boolean御毅、 undefined、 null

復(fù)雜數(shù)據(jù)類型:Object怜珍、function端蛆、Array

ES6新增

Symbol 表示獨(dú)一無(wú)二

ES10新增:

BigLnt 表示任意大的數(shù)

ps:存儲(chǔ)區(qū)別

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型存儲(chǔ)在內(nèi)存中的位置不同:

  • 基本數(shù)據(jù)類型存儲(chǔ)在棧中
  • 引用類型的對(duì)象存儲(chǔ)于堆中

二、undefined和null的區(qū)別

相同點(diǎn):

1酥泛、在if語(yǔ)句中nullundefined都會(huì)轉(zhuǎn)換為false

2今豆、用 == 比較 返回true

null ==undefined // true

不同點(diǎn):

undefined:代表的含義未定義

null: 表示一個(gè)空對(duì)象指針

typeof undefined //'undefined'
typeof null // "object"

三、判斷 JavaScript 的數(shù)據(jù)類型typeof

typeof:type的返回值是字符串(String)

typeof undefined // "undefined"
typeof null // "object"
typeof 1 // "number"
typeof "1" // "string"
typeof Symbol() // "symbol"
typeof function() {} // "function"
typeof {} // "object"

typeof 不能識(shí)別 null柔袁,如何識(shí)別 null呆躲?[使用全等即可]

let a = null
a === null

instanceof: 可以用來(lái)判斷對(duì)象的類型:

instanceof 只能正確判斷引用數(shù)據(jù)類型 而不能判斷基本數(shù)據(jù)類型,

原因:其內(nèi)部運(yùn)行機(jī)制是判斷在其原型鏈中能否找到該類型的原型

或者可以理解為:一個(gè)對(duì)象是否在一個(gè)類的示例上

var date = new Date()
date instanceof Date // true

var number = new Number()
number instanceof Number // true 

var string = new String()
string instanceof String // true

四捶索、js數(shù)據(jù)類型轉(zhuǎn)換

強(qiáng)制類型轉(zhuǎn)換

轉(zhuǎn)化成字符串 toString() String()

轉(zhuǎn)換成數(shù)字 Number()插掂、 parseInt()、 parseFloat()

轉(zhuǎn)換成布爾類型 Boolean()

隱式類型轉(zhuǎn)換

"" + - / % === =

例子:

轉(zhuǎn)換為數(shù)字

Number():可以把任意值轉(zhuǎn)換成數(shù)字情组,如果有不是數(shù)字的值燥筷,則會(huì)返回NaN
------------------
Number('1')   // 1
Number(true)  // 1
Number('123a') // NaN
// 空字符串轉(zhuǎn)為0
Number('') // 0
// 布爾值:true 轉(zhuǎn)成 1箩祥,
//false 轉(zhuǎn)成 0
Number(true) // 1
Number(false) // 0
// undefined:轉(zhuǎn)成 NaN
Number(undefined) // NaN
// null:轉(zhuǎn)成0
Number(null) // 0

parseInt(string):解析一個(gè)字符串并返回指定基數(shù)的十進(jìn)制整數(shù)院崇,
------------------
parseInt('a123')  // NaN  如果第一個(gè)字符不是數(shù)字或者符號(hào)就返回NaN
parseInt('123a')  // 123
parseInt('32a3') //32

String()//轉(zhuǎn)換字符串
-------------------
String(1) // "1"
String("a") // "a" 字符串轉(zhuǎn)換后還是原來(lái)的值
String(true) // "true"
String(false) // "false"
String(undefined) // "undefined"
String(null) // "null"

Boolean()可以將任意類型的值轉(zhuǎn)為布爾值
-------------------
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(1)// true
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
隱式類型轉(zhuǎn)換
-------------------
    - * 不進(jìn)行演示
一旦存在字符串,進(jìn)行字符串拼接操作
'1' + 1 // '11'
'1' + true // "1true"
'1' + false // "1false"
'1' + {} // "1[object Object]"
'1' + [] // "1"
'1' + undefined // "1undefined"
'1' + null // "1null"

5袍祖、==和===的區(qū)別

(==)相等操作符會(huì)做類型轉(zhuǎn)換底瓣,再進(jìn)行值的比較,

(===)全等運(yùn)算符不會(huì)做類型轉(zhuǎn)換

'' == '0' // false
1 == '1' // true
1 === '1' // false

6蕉陋、作用域

簡(jiǎn)單的理解就是變量的有效范圍捐凭。

可分為:全局作用域、函數(shù)作用域凳鬓、塊級(jí)作用域

全局作用域

函數(shù)最外層定義的變量擁有全局作用域茁肠,函數(shù)內(nèi)部是可以訪問(wèn)的

let inVariable = "全局作用域";
function fn() {
    console.log(inVariable); // 全局作用域
}
fn();

函數(shù)作用域

函數(shù)作用域也叫局部作用域:如果一個(gè)變量是在函數(shù)內(nèi)部聲明的,那這些變量只能在函數(shù)下訪問(wèn)缩举,不能再函數(shù)以外去訪問(wèn)

function fn() {
    let inVariable = "函數(shù)內(nèi)部變量";
    console.log(inVariable)// "函數(shù)內(nèi)部變量";
}
fn();
//報(bào)錯(cuò)
console.log(inVariable); // Uncaught ReferenceError: inVariable is not defined

塊級(jí)作用域

ES6引入了塊級(jí)作用域 垦梆,【由大括號(hào)包裹匹颤,比如:if(){},for(){}等】

letconst關(guān)鍵字,和var關(guān)鍵字不同【后續(xù)講解let、const托猩、var區(qū)別】

在大括號(hào)中使用letconst聲明的變量存在于塊級(jí)作用域中印蓖。在大括號(hào)之外不能訪問(wèn)這些變量

{
  // 塊級(jí)作用域中的變量
  let a = 'Hello';
  var b = 'World';
  console.log(a); // Hello
}
console.log(b); // 'World'
console.log(a); // 報(bào)錯(cuò):Uncaught ReferenceError: a is not defined

如何訪問(wèn)函數(shù)內(nèi)部的變量(本人面試時(shí)候有問(wèn)到)

1、通過(guò)return訪問(wèn):

     function bar(value) {
        var testValue = "hello word";
        return testValue;
      }
     console.log(bar());//hello word

2京腥、通過(guò) 閉包 訪問(wèn)函數(shù)內(nèi)部變量

閉包的定義:閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)

可以理解成“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)“

閉包是將函 數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的橋梁赦肃。”

     function bar() {
        var testValue = "hello";
        var rusult = testValue + "Word";
         
        function innser() {
          console.log(rusult);//helloWord
          return rusult;
        }
         
        return innser();
      }
      console.log(bar()); // "helloWord"

7公浪、var他宛、let、const之間的區(qū)別

var 聲明變量可以重復(fù)聲明欠气,而 let 不可以重復(fù)聲

var 是不受限于塊級(jí)作用域的堕汞,而 let 是受限于塊級(jí)作用域

var 可以在聲明的上面訪問(wèn)變量,而 let 有暫存死區(qū)晃琳,在聲明的上面訪問(wèn)變量會(huì)報(bào)錯(cuò)

var在全局作用域下聲明變量會(huì)導(dǎo)致變量掛載在 window 上let讯检、const 不會(huì)

const 聲明之后必須賦值,否則會(huì)報(bào)錯(cuò) const 定義不可變的量卫旱,改變了就會(huì)報(bào)錯(cuò)

const 和 let 一樣支持塊級(jí)作用域人灼、在聲明的上面訪問(wèn)變量會(huì)報(bào)錯(cuò)

上代碼var

//用var聲明的變量既是全局變量也是頂層變量,所謂頂層就是window
var a = 10;
console.log(window.a) // 10
//使用var聲明的變量存在變量提升的情況
console.log(a) // undefined
var a = 20
//在編譯階段顾翼,編譯器會(huì)將其變成以下執(zhí)行
var a;
console.log(a); //undefined
a = 20;
console.log(a); //20
//var 多次聲明
var a = 20 
var a = 30
console.log(a) // 30
//在函數(shù)中使用使用var聲明變量時(shí)候投放,該變量是局部的
var a = 20
function change(){
    var a = 30
}
change()
console.log(a) // 20 

let

//let 具有塊級(jí)作用域
{
    let a = 20
}
console.log(a) // 報(bào)錯(cuò)Uncaught ReferenceError: a is not defined
//不存在變量提升
console.log(a) // 報(bào)錯(cuò)Uncaught ReferenceError: Cannot access 'a' before initialization
let a = 2
// let 不允許相同作用域下聲明
let a = 20
let a = 30 //報(bào)錯(cuò)【累了具體報(bào)錯(cuò)不打印了】

const

//const聲明一個(gè)只讀的常量,一旦聲明适贸,常量的值就不能改變
const a = 1
a = 3 // 報(bào)錯(cuò)
//const一旦聲明變量灸芳,就必須立即初始化,不能留到以后賦值
const a;
// SyntaxError: Missing initializer in const declaration

const實(shí)際上保證的并不是變量的值不能改動(dòng)拜姿,而是變量指向的那個(gè)內(nèi)存地址的數(shù)據(jù)不能改動(dòng)烙样。

復(fù)雜數(shù)據(jù)類型變量指向的是內(nèi)存地址,保存的只是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針蕊肥,const只能保證這個(gè)指針是固定的谒获,并不能確保改變量的結(jié)構(gòu)不變

const foo = {};

// 為 foo 添加一個(gè)屬性,可以成功
foo.a = 123;
foo.a // 123

// 將 foo 指向另一個(gè)對(duì)象壁却,就會(huì)報(bào)錯(cuò)
foo = {}; //報(bào)錯(cuò)

8批狱、閉包

閉包的概念就是:有權(quán)利訪問(wèn)另一個(gè)函數(shù)作用域中的變量,一般就是函數(shù)包裹著函數(shù)[之前有提到過(guò)閉包的定義]

閉包可以重用一個(gè)變量展东,且保證這個(gè)變量不會(huì)被污染的一種機(jī)制赔硫。這些變量的值始終保持在內(nèi)存中,不會(huì)被垃圾回收機(jī)制處理

閉包的缺點(diǎn):由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中盐肃,內(nèi)存消耗很大爪膊,所以不能濫用閉包向胡,否則會(huì)造成網(wǎng)頁(yè)的性能問(wèn)題

使用場(chǎng)景 :

  • 防抖、節(jié)流惊完、函數(shù)套函數(shù)避免全局污染

  • 創(chuàng)建私有變量

  • 延長(zhǎng)變量的生命周期

//簡(jiǎn)單的閉包    
function bar() {
        var testValue = "hello";
        var rusult = testValue + "Word";
         
        function innser() {
          console.log(rusult);//helloWord
          return rusult;
        }
         
        return innser();
      }
      console.log(bar()); // "helloWord"

9僵芹、什么是內(nèi)存泄漏

內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在

10、原型小槐、原型鏈

原型

  1. 每個(gè)函數(shù)都有一個(gè)prototype屬性拇派,被稱為顯示原型
  2. 每個(gè)引用數(shù)據(jù)類型都會(huì)有_ _proto_ _屬性,其被稱為隱式原型
  3. 每個(gè)引用數(shù)據(jù)類型,它的_ _ proto_ _屬性指向它的構(gòu)造函數(shù)的’prototype’屬性凿跳。
  4. 每個(gè)prototype原型都有一個(gè)constructor屬性件豌,指向它關(guān)聯(lián)的構(gòu)造函數(shù)。
  5. 當(dāng)試圖得到一個(gè)對(duì)象的屬性時(shí)控嗜,如果這個(gè)對(duì)象本身不存在這個(gè)屬性茧彤,那么就會(huì)去它的_ _ proto_ _屬性(也就是它的構(gòu)造函數(shù)的’prototype’屬性)中去尋找。

原型鏈

當(dāng)訪問(wèn)一個(gè)對(duì)象的某個(gè)屬性時(shí)疆栏,會(huì)先在這個(gè)對(duì)象本身屬性上查找曾掂,如果沒(méi)有找到,則會(huì)去它的proto隱式原型上查找壁顶,即它的構(gòu)造函數(shù)的prototype珠洗,如果還沒(méi)有找到就會(huì)再在構(gòu)造函數(shù)的prototype的proto中查找,這樣一層一層向上查找就會(huì)形成一個(gè)鏈?zhǔn)浇Y(jié)構(gòu)若专,我們稱為原型鏈许蓖。直到頂層返回null

11、什么是遞歸

遞歸:如果一個(gè)函數(shù)在內(nèi)部可以調(diào)用其本身调衰,那么這個(gè)函數(shù)就是遞歸函數(shù)膊爪。簡(jiǎn)單理解:函數(shù)內(nèi)部自己調(diào)用自己, 這個(gè)函數(shù)就是遞歸函數(shù)

注意:遞歸函數(shù)的作用和循環(huán)效果一樣,由于遞歸很容易發(fā)生“棧溢出”錯(cuò)誤(stack overflow)嚎莉,所以必須要加退出條件return米酬。

12、什么是防抖什么是節(jié)流

防抖:觸發(fā)高頻事件后 n 秒內(nèi)函數(shù)只會(huì)執(zhí)行一次萝喘,如果 n 秒內(nèi)高頻事件再次被觸發(fā)淮逻,則重新計(jì)算時(shí)間

應(yīng)用場(chǎng)景:用戶在輸入框中連續(xù)輸入一串字符時(shí)琼懊,可以通過(guò)防抖策略阁簸,只在輸入完后,才執(zhí)行查詢的請(qǐng)求哼丈,這樣可以有效減

少請(qǐng)求次數(shù)启妹,節(jié)約請(qǐng)求資源;

節(jié)流:高頻事件觸發(fā)醉旦,但在 n 秒內(nèi)只會(huì)執(zhí)行一次饶米,所以節(jié)流會(huì)稀釋函數(shù)的執(zhí)行頻率(也可以理解:可以減少一段時(shí)間內(nèi)事件的觸發(fā)頻率)

應(yīng)用場(chǎng)景: 鼠標(biāo)連續(xù)不斷地觸發(fā)某事件(如點(diǎn)擊)桨啃,只在單位時(shí)間內(nèi)只觸發(fā)一次;

區(qū)別:防抖動(dòng)是將多次執(zhí)行變?yōu)樽詈笠淮螆?zhí)行檬输,節(jié)流是將多次執(zhí)行變成每隔一段時(shí)間執(zhí)行照瘾。

13、call,apply和bind的區(qū)別

相同點(diǎn): 三個(gè)函數(shù)都會(huì)改變this的指向(調(diào)用這三個(gè)函數(shù)的函數(shù)內(nèi)部的this)

不同點(diǎn):

  • call丧慈、apply與bind的差別

call和apply改變了函數(shù)的this上下文后便執(zhí)行該函數(shù),而bind則是返回改變了上下文后的一個(gè)函數(shù)析命。(bind不會(huì)立即執(zhí)行)

  • call、apply的區(qū)別

他們倆之間的差別在于參數(shù)的區(qū)別逃默,call和apply的第一個(gè)參數(shù)都是要改變上下文的對(duì)象鹃愤,而call從第二個(gè)參數(shù)開(kāi)始以參數(shù)列表的形式展現(xiàn),apply則是把除了改變上下文對(duì)象的參數(shù)放在一個(gè)數(shù)組里面作為它的第二個(gè)參數(shù)

14完域、Localstorage软吐、sessionStorage、cookie 的區(qū)別

共同點(diǎn):都是保存在瀏覽器端的吟税,且同源

localStorage:聲生命周期永久生效凹耙,除非手動(dòng)刪除 否則關(guān)閉頁(yè)面也會(huì)存在

sessionStorage:生命周期為關(guān)閉瀏覽器窗口

存儲(chǔ)大小:sessionStorage約5M肠仪、localStorage約20M

Cookie是服務(wù)器發(fā)給客戶端的特殊信息使兔,cookie是以文本的方式保存在客戶端(儲(chǔ)存量4k左右)。cookie可以設(shè)置過(guò)期時(shí)間藤韵,到達(dá)時(shí)間后自動(dòng)銷毀虐沥,如果沒(méi)有設(shè)置會(huì)隨瀏覽器的關(guān)閉而銷毀。cookei中儲(chǔ)存的數(shù)據(jù)會(huì)伴隨著每一次http請(qǐng)求發(fā)送到服務(wù)端泽艘。

15欲险、同源策略

MDN官方給定的概念:同源策略限制了從同一個(gè)源加載的文檔或腳本如何與來(lái)自另一個(gè)源的資源進(jìn)行交互。這是一個(gè)用于隔離潛在惡意文件的重要安全機(jī)制

通俗的理解:瀏覽器規(guī)定匹涮,A 網(wǎng)站的 JavaScript天试,不允許和非同源的網(wǎng)站 C 之間,進(jìn)行資源的交互

同源:協(xié)議然低,域名喜每,端口,三者必須一致

跨域

同源指的是兩個(gè) URL 的協(xié)議雳攘、域名带兜、端口一致,反之吨灭,則是跨域

跨域刚照,指的是從一個(gè)域名去請(qǐng)求另外一個(gè)域名的資源。即跨域名請(qǐng)求

跨域時(shí)喧兄,瀏覽器不能執(zhí)行其他域名網(wǎng)站的腳本无畔,是由瀏覽器的同源策略造成的啊楚,也是瀏覽器施加的安全限制。

怎么解決跨域

1浑彰、需要后臺(tái)配置cors進(jìn)行跨域恭理,原理是給服務(wù)器設(shè)置一個(gè)響應(yīng)頭,然后瀏覽器將會(huì)允許跨域請(qǐng)求

2郭变、jsonp:原理動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽蚯斯,利用script標(biāo)簽的src屬性不受同源策略的限制。所有的src屬性和href都不會(huì)受同源策略的限制饵较∨那叮可以請(qǐng)求第三方服務(wù)器的數(shù)據(jù)內(nèi)容

3、反向代理

4循诉、ngex

16横辆、常見(jiàn)的http狀態(tài)碼

200:這個(gè)是最常見(jiàn)的http狀態(tài)碼,表示服務(wù)器已經(jīng)成功接受請(qǐng)求茄猫,并將返回客戶端所請(qǐng)求的最終結(jié)果

202:表示服務(wù)器已經(jīng)接受了請(qǐng)求狈蚤,但是還沒(méi)有處理,而且這個(gè)請(qǐng)求最終會(huì)不會(huì)處理還不確定

204:服務(wù)器成功處理了請(qǐng)求划纽,但沒(méi)有返回任何實(shí)體內(nèi)容 脆侮,可能會(huì)返回新的頭部元信息

301:客戶端請(qǐng)求的網(wǎng)頁(yè)已經(jīng)永久移動(dòng)到新的位置,當(dāng)鏈接發(fā)生變化時(shí)勇劣,返回301代碼告訴客戶端鏈接的變化靖避,客戶端保存新的鏈接,并向新的鏈接發(fā)出請(qǐng)求比默,已返回請(qǐng)求結(jié)果

404:請(qǐng)求失敗幻捏,客戶端請(qǐng)求的資源沒(méi)有找到或者是不存在

500:服務(wù)器遇到未知的錯(cuò)誤,導(dǎo)致無(wú)法完成客戶端當(dāng)前的請(qǐng)求命咐。

503:服務(wù)器由于臨時(shí)的服務(wù)器過(guò)載或者是維護(hù)篡九,無(wú)法解決當(dāng)前的請(qǐng)求,

17醋奠、事件循環(huán)機(jī)制EventLoop

Event Loop即事件循環(huán)榛臼,是解決javaScript單線程運(yùn)行阻塞的一種機(jī)制。

首先我們需要知道JS 是??阻塞單線程語(yǔ)?窜司,就是同一時(shí)間只能做一件事情

同步任務(wù)和異步任務(wù)

javascript是單線程沛善。單線程就意味著,所有任務(wù)需要排隊(duì)例证,前一個(gè)任務(wù)結(jié)束路呜,才會(huì)執(zhí)行后一個(gè)任務(wù)。如果前一個(gè)任務(wù)耗時(shí)很長(zhǎng)织咧,后一個(gè)任務(wù)就意味著等待胀葱。于是javascript所有任務(wù)分為兩種:同步任務(wù),異步任務(wù)

同步任務(wù):不需要等待可立即看到執(zhí)行結(jié)果笙蒙,比如console抵屿、promise 的回調(diào)

異步任務(wù):異步任務(wù)需要等待一定的時(shí)候才能看到結(jié)果,比如setTimeout捅位、setInterval轧葛、網(wǎng)絡(luò)請(qǐng)求(ajax)、script 腳本的執(zhí)行

異步任務(wù)分為:宏任務(wù)與微任務(wù)

宏任務(wù):script(整體代碼)艇搀、setTimeout尿扯、setInterval、UI 渲染焰雕、 I/O衷笋、postMessage、 MessageChannel矩屁、setImmediate(Node.js 環(huán)境)

微任務(wù):Promise辟宗、 MutaionObserver、process.nextTick(Node.js環(huán)境)

  1. 在執(zhí)行同步代碼的時(shí)候吝秕,如果遇到了異步事件泊脐,js 引擎并不會(huì)一直等待其返回結(jié)果,而是會(huì)將這個(gè)事件掛起烁峭,繼續(xù)執(zhí)行執(zhí)行棧中的其他任務(wù)
  2. 當(dāng)同步事件執(zhí)行完畢后容客,再將異步事件對(duì)應(yīng)的回調(diào)加入到與當(dāng)前執(zhí)行棧中,不同的另一個(gè)任務(wù)隊(duì)列中等待執(zhí)行约郁。
  3. 任務(wù)隊(duì)列可以分為宏任務(wù)對(duì)列和微任務(wù)對(duì)列耘柱,當(dāng)當(dāng)前執(zhí)行棧中的事件執(zhí)行完畢后,js 引擎首先會(huì)判斷微任務(wù)對(duì)列中是否有任務(wù)可以執(zhí)行棍现,如果有就將微任務(wù)隊(duì)列的事件壓入棧中執(zhí)行调煎。
  4. 當(dāng)微任務(wù)對(duì)列中的任務(wù)都執(zhí)行完成后再去判斷宏任務(wù)對(duì)列中的任務(wù)。

執(zhí)行順序
1己肮、先執(zhí)行主線程

2士袄、遇到宏隊(duì)列,放到宏隊(duì)列

3谎僻、遇到微隊(duì)列娄柳,放到微隊(duì)列,

4艘绍、主線程執(zhí)行完畢

5赤拒、執(zhí)行微隊(duì)列,微隊(duì)列執(zhí)行完畢

6、執(zhí)行一次宏隊(duì)列挎挖,中的一個(gè)任務(wù)这敬,執(zhí)行完畢

7、執(zhí)行微隊(duì)列蕉朵,執(zhí)行完畢

8崔涂、依次循環(huán)

上代碼:

    setTimeout(function () {
        console.log(1);
      });
      new Promise(function (resolve, reject) {
        console.log(2);
        resolve(3);
      }).then(function (val) {
        console.log(val);
      });
      console.log(4);
  // 2431


setTimeout(function() {
  console.log(1)
}, 0);
new Promise(function(resolve, reject) {
  console.log(2);
  resolve()
}).then(function() {
  console.log(3)
});
process.nextTick(function () {
  console.log(4)
})
console.log(5)
//25431
1、主線程開(kāi)始執(zhí)行始衅,遇到setTimeout冷蚂,將setTimeout的回調(diào)函數(shù)丟到宏任務(wù)隊(duì)列中
2、在往下執(zhí)行new Promise立即執(zhí)行汛闸,輸出2
3蝙茶、.then的回調(diào)函數(shù)丟到微任務(wù)隊(duì)列中,再繼續(xù)執(zhí)行
4、遇到process.nextTick诸老,同樣將回調(diào)函數(shù)扔到為任務(wù)隊(duì)列隆夯,再繼續(xù)執(zhí)行,輸出5
5孕锄、當(dāng)所有同步任務(wù)執(zhí)行完成后看有沒(méi)有可以執(zhí)行的微任務(wù)
6吮廉、因?yàn)閜rocess.nextTick指定的異步任務(wù)總是發(fā)生在所有異步任務(wù)之前,因此先執(zhí)行process.nextTick輸出4畸肆,然后執(zhí)行.then函數(shù)輸出3宦芦,第一輪執(zhí)行結(jié)束。
7轴脐、第二輪:從宏任務(wù)隊(duì)列開(kāi)始调卑,發(fā)現(xiàn)setTimeout回調(diào),輸出1執(zhí)行完畢大咱,因此結(jié)果是25431

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恬涧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碴巾,更是在濱河造成了極大的恐慌溯捆,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厦瓢,死亡現(xiàn)場(chǎng)離奇詭異提揍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)煮仇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門劳跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人浙垫,你說(shuō)我怎么就攤上這事刨仑≈E担” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵杉武,是天一觀的道長(zhǎng)辙诞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)艺智,這世上最難降的妖魔是什么倘要? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任圾亏,我火速辦了婚禮十拣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘志鹃。我一直安慰自己夭问,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布曹铃。 她就那樣靜靜地躺著缰趋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陕见。 梳的紋絲不亂的頭發(fā)上秘血,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音评甜,去河邊找鬼灰粮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忍坷,可吹牛的內(nèi)容都是我干的粘舟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佩研,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柑肴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旬薯,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晰骑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绊序,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體硕舆,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年政模,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岗宣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淋样,死狀恐怖耗式,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤刊咳,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布彪见,位于F島的核電站,受9級(jí)特大地震影響娱挨,放射性物質(zhì)發(fā)生泄漏余指。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一跷坝、第九天 我趴在偏房一處隱蔽的房頂上張望酵镜。 院中可真熱鬧,春花似錦柴钻、人聲如沸淮韭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)靠粪。三九已至,卻和暖如春毫蚓,著一層夾襖步出監(jiān)牢的瞬間占键,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工元潘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畔乙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓柬批,卻偏偏與公主長(zhǎng)得像啸澡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氮帐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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