Open
Description
https://blog.techbridge.cc/2018/11/10/javascript-hoisting/
-
什麼是 Hoisting
提升, 也就是 -
為什麼要 Hoisting <> 如果沒有
- 一定要先變數才能用
- 一定要先宣告 function 才能用
- 沒有辦法達成 function 互相呼叫
- 運作方式
- EC (Execution Contexts)/ global EC / VO (Variable Object) - 簡單來說就是有自己的 scope 不會把所有的 function/ 變數 提升到 global 的層級
- hoisting 只會提升宣告而非賦值
- 順序
1.把參數放到 VO 裡面並設定好值,傳什麼進來就是什麼,沒有值的設成 undefined
2.把 function 宣告放到 VO 裡,如果已經有同名的就覆蓋掉
3.把變數宣告放到 VO 裡,如果已經有同名的則忽略
4. 嚴格模式的運作方式不一樣
- TDZ (Temporal Dead Zone)
- let const 初始化不是 undefined
- 在被賦值前的這段時間就叫 TDZ
- 是一個時間上的概念 而不是空間上的
Metadata
Metadata
Assignees
Labels
No labels