面試知識-es6

1.let和const,var的區別?promise

1).var聲明的變量會掛載在window上,而let和const聲明的變量不會。閉包

2).var聲明變量存在變量提高,let和const不存在變量提高。app

3).let和const聲明造成塊做用域。異步

4).同一做用域下let和const不能聲明同名變量,而var能夠函數

5).暫存死區this

6).const(一、一旦聲明必須賦值,不能使用null佔位。二、聲明後不能再修改;三、若是聲明的是複合類型數據,能夠修改其屬性)spa

7).let和const不會建立爲去全局對象的屬性。rest

2.箭頭函數和普通函數的區別對象

1).箭頭函數是匿名函數,不能做爲構造函數,不能使用new隊列

2).箭頭函數不能綁定arguments,取而代之用rest參數...解決,普通函數綁定arguments參數

3).箭頭函數不綁定this,會捕獲其所在的上下文的this值,做爲本身的this值

4).箭頭函數經過 call()  或  apply() 方法調用一個函數時, 只傳入了一個參數,對 this 並無影響

5).箭頭函數沒有原型屬性

6).箭頭函數不能當作Generator函數,不能使用yield關鍵字

7).箭頭函數的this永遠指向其上下文的this,沒有辦改變其指向,普通函數的this指向調用它的對象
3.promise?

1)promise的做用?

主要用於異步計算;

能夠將異步操做隊列化,按照指望的順序執行,返回符合咱們預期的結果;

能夠在對象之間傳遞和操做promise,幫助咱們處理隊列;

2)爲何會出現promise?

爲了不界面凍結(任務)

異步操做的常見語法

異步回調的問題:(1.以前處理異步是經過純粹的回調函數的形式進行處理

2.很容易進入到回調地獄中,剝奪了函數return的能力

3.問題能夠解決,可是難以讀懂,維護困難

4.稍有不慎就會踏入回調地獄 - 嵌套層次深,很差維護)

3)promise的優點?

1.promise是一個對象,對象和函數的區別就是對象能夠保存狀態,函數不能夠(閉包除外)

2.並未剝奪函數return的能力,所以無需層層傳遞callback,進行回調獲取數據

3.代碼風格,容易理解,便於維護

4.多個異步等待合併便於解決

4).promise詳解

(

  • resolve做用是,將Promise對象的狀態從「未完成」變爲「成功」(即從 pending 變爲 resolved),在異步操做成功時調用,並將異步操做的結果,做爲參數傳遞出去;
    reject做用是,將Promise對象的狀態從「未完成」變爲「失敗」(即從 pending 變爲 rejected),在異步操做失敗時調用,並將異步操做報出的錯誤,做爲參數傳遞出去。
  • promise有三個狀態:
    一、pending[待定]初始狀態
    二、fulfilled[實現]操做成功
    三、rejected[被否決]操做失敗
    當promise狀態發生改變,就會觸發then()裏的響應函數處理後續步驟;
    promise狀態一經改變,不會再變。
  • Promise對象的狀態改變,只有兩種可能:
    從pending變爲fulfilled
    從pending變爲rejected。
    這兩種狀況只要發生,狀態就凝固了,不會再變了。

)

5).假如在.then()的函數裏面不返回新的promise,會怎樣?.then()

一、接收兩個函數做爲參數,分別表明fulfilled(成功)和rejected(失敗)
二、.then()返回一個新的Promise實例,因此它能夠鏈式調用
三、當前面的Promise狀態改變時,.then()根據其最終狀態,選擇特定的狀態響應函數執行
四、狀態響應函數能夠返回新的promise,或其餘值,不返回值也能夠咱們能夠認爲它返回了一個null;
五、若是返回新的promise,那麼下一級.then()會在新的promise狀態改變以後執行
六、若是返回其餘任何值,則會當即執行下一級.then()

6).then()裏面有.then()的狀況

(

一、由於.then()返回的仍是Promise實例

二、會等裏面的then()執行完,再執行外面的

)

4.

相關文章
相關標籤/搜索