執行上下文和執行上下文棧
變量提升和函數提升
- 變量提升
- 所用使用var定義的變量,在程序運行前會被先定義,并賦初值為underfind,保存到其執行上下文中
- 函數提升
- 在調用函數,執行函數體之前,會先執行函數定義,初值為函數對象
- 先執行變量提升,在執行函數提升
執行上下文
- 全局執行上下文
- 將window確定為全局執行上下文
- 對全局數據進行預處理
- var定義的變量
- function
- this指向window
- 執行全局代碼
- 函數執行上下文
- 在棧中創建虛擬對象,作為函數執行上下文(入棧)
- 對函數局部變量進行預處理
- 形參賦值為實參,添加為函數執行上下文的屬性
- 為argument賦值,添加為函數執行上下文的屬性
- var定義的變量提前
- function提前
- this指向函數執行上下文
- 執行函數
- 釋放上下文對象(出棧)
執行上下文棧
管理和保存所有的執行上下文對象
var c = 1function c(c){c = 2console.log(c)}
c(5) // 05.js:31 Uncaught TypeError: c is not a function at 05.js: 31