回覆列表
  • 1 # 網際網路技能圖譜

    相同點:

    都是改變函式內部的this指向。

    區別:1. 傳參形式不同用call和apply方法,this指向他們的第一個引數,apply的第二個引數是一個引數陣列,call的第二個及以後的引數都是數組裡面的元素,需要全部列舉。

    例:

    用法1是:獲取陣列中的最大值和最小值,利用他們擴充作用域擁有Math的min和max方法;由於沒有什麼物件呼叫這個方法,所以第一個引數可以寫作null或者本身;

    用法2是:驗證是否是陣列

    2. bind與apply、call最大的區別就是:

    bind不會立即呼叫,其他兩個會立即呼叫;bind是返回對應函式,便於稍後呼叫,apply、call是立即呼叫;bind是新建立一個函式,然後把它的上下文繫結到bind()括號中的引數上,然後將它返回。

  • 2 # 山東中公優就業

    1、call,apply和bind的區別它們在功能上是沒有區別的,都是改變this的指向,它們的區別主要是在於方法的實現形式和引數傳遞上的不同。call和apply方法都是在呼叫之後立即執行的。而bind呼叫之後是返回原函式,需要再呼叫一次才行

    2、①:函式.call(物件,arg1,arg2....)

    ②:函式.apply(物件,[arg1,arg2,...])

    3、總結一下call,apply,bind方法:

    a:第一個引數都是指定函式內部中this的指向(函式執行時所在的作用域),然後根據指定的作用域,呼叫該函式。

    b:都可以在函式呼叫時傳遞引數。call,bind方法需要直接傳入,而apply方法需要以陣列的形式傳入。

    c:call,apply方法是在呼叫之後立即執行函式,而bind方法沒有立即執行,需要將函式再執行一遍。有點閉包的味道。

    d:改變this物件的指向問題不僅有call,apply,bind方法,也可以使用that變數來固定this的指向。

  • 中秋節和大豐收的關聯?
  • 秦晉餚之戰的人物賞析?