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
持續更新中.......