1. 程式人生 > 其它 >js高階-函式的作用域/執行上下文

js高階-函式的作用域/執行上下文

1.變數提升的引入

那麼到底是什麼機制產生了變數提升,為什麼需要變數提升hoist呢?

2.執行上下文

(1)全域性執行上下文

  • 在執行全域性程式碼前,將window確定為全域性執行上下文==>也就是全域性物件
  • 對全域性資料進行預處理  
    • var 定義的全域性變數 == > undefined,新增到window物件上作為其屬性
    • function宣告的全域性函式 == > 直接賦值,新增為window的方法
    • this == > 直接賦值為window ,可以通過它呼叫window上的屬性和方法
  • 執行全域性程式碼

(2)區域性執行上下文(函式執行上下文)

  • 在呼叫函式時,準備執行函式體之前==>建立一個對應的函式執行上下文物件
  • 對區域性引數進行預處理
    • 形參變數 ==> 賦值(接收的實參) == >新增為執行上下文的屬性
    • arguments ==> 賦值(接收的實參列表) == >新增為執行上下文屬性
    • 在函式內部var定義的區域性變數 == > undefined ==> 變數提升 ==>新增為執行上下文屬性
    • 在函式內部宣告的函式 ==> 賦值(fun),新增為執行上下文方法
    • this ==> 賦值(呼叫函式的物件)
  • 開始執行函式體程式碼