1.2.3.21.call()、apply() 與 bind()

  • 當執行環境被建立時會產生幾樣東西:

    • 1.變數環境 (Variable environment), 外部環境 (Outer environment)

      • 當在變數環境找不到變數時, 會到所參照的外部環境去尋找

    • 2.this

      • 不須宣告, 由JavaScript engine產生, this依據函數的呼叫方式會指向不同的物件

    • 3.外部參照的環境

  • 函數除了CODE property與name property外, 預設會有call(), apply(), bind()

    • 程式1的this會指向person, 因為是物件本身的方法

    • 程式2的this會指向全域物件

    • 程式3使用bind傳入this所想指向的物件, 並回傳一個新的函數

    • 程式5使用call傳入this所想指向的物件以及參數, 並執行函數

    • 程式6使用apply傳入this所想指向的物件以及參數, 並執行函數

    • 程式7使用IIFE, apply傳入this所想指向的物件以及參數, 並執行函數

    • function borrowing

    • function currying

      • bind的第二個參數會作為新函數的第一個參數並永久使用

  • function currying

    • 建立一個函數的拷貝並設定預設的參數

  • bind: 將this重新指向, 創造函數的拷貝並返回但不會執行

  • call: 將this重新指向並傳入其他參數, 並執行函數

  • apply: 將this重新指向並傳入其他參數, 並執行函數

Last updated

Was this helpful?