2021前端面試題-JS篇

1. 原型(prototype)


2. 原型鏈

```

當查找一個對象的某個屬性時,會先從它自身的屬性上查找,

如果找不到的話會從它的_proto_屬性上查找,就是這個構造函數的prototype屬性,

如果還沒找到就會繼續在_proto_上查找,直到最頂層,找不到則為undefined,

像這樣一層一層去查找形成一個鏈式的稱為原型鏈

```

3. new關鍵字

new一個函數,中間發生了什么

1.開辟一個內存空間,也就是創建一個空對象,obj={}或obj=new Object()

2.將這個新對象的_proto_屬性指向它構造函數的prototype

3.將構造函數this綁定為這個新對象,在空對象上掛在屬性和方法(call或apply方式)

4.返回這個新對象


4. call apply bind

相同:都是改變函數上下文this指向

不同:bind返回的是一個函數,不會立即執行

? ? ? ? ?傳參的不同 apply第二個參數為數組形式

? ? ? ? ?call apply都是對函數的直接調用


5. call apply bind的實現

6. this的指向

1.作為普通函數直接調用,this指向window

2.作為對象方法去調用的話,this指向調用它的這個對象

3.箭頭函數,沒有this,this取決于外層離它最近的非箭頭函數的this

4.構造函數的this,指向創建這個構造函數的實例對象

7. 作用域

1.詞法作用域(靜態作用域)

? js采用的就是詞法作用域

? 只有函數可以限定作用域

? 函數允許函數訪問外層作用域的變量

? 函數在定義的時候決定了函數作用域,詞法作用域關心函數在何處被定義

2.動態作用域

? 函數在調用的時候決定了函數作用域,動態作用域關心函數在何處被調用

8. 作用域鏈

變量取值會到創建這個變量的函數作用域中去查找,如果找不到會向上查找,直到查找到全局作用域,這就形成了一個作用域鏈

9. 節流和防抖

1.節流

2.防抖

10. 繼承(6種方式)以及優缺點

1.原型鏈繼承

2.構造函數繼承

3.組合繼承(原型鏈繼承+構造函數繼承)

4.原型式繼承

5.寄生繼承

6.組合寄生繼承

11. 閉包

定義在一個函數內部的函數,這個內部函數有權訪問外部函數作用域的變量

優點:

缺點:

12. promise

13. js事件循環(event loop)

js在運行中的任務,有一套收集,排隊,執行的特殊機制,這種機制就是事件循環

遇到同步事件直接執行,遇到異步事件分為宏任務和微任務

如果微任務列表里有任務,先執行微任務再執行宏任務

14. es6 let/const

塊級作用域? 暫時性死區? 能否被修改

15. axios(攔截器)

16. 箭頭函數

沒有this? call apply方法修改this無效

沒有prototype屬性

沒有argument

不能使用new? 不能用作構造函數,會報錯

17. es6 Class語法

18. instanceOf的實現方式

19. es6 set和map


持續更新中.......

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容