差异:

1. 运行函数内容

  1. call和apply会调用函数
    • apply与call:调用一个对象的一个方法,用另一个对象替换当前对象。
      • 例如:B.apply(A, arguments)即 A 对象应用 B 对象的方法。
  2. bind()不会调用函数

2. 参数形式

  • call传递多个参数
  • apply的arguments参数为数组形式
  • bind在返回的函数中传递参数

3. 返回值

  • 函数.call()函数.apply()会返回函数的返回结果
  • 函数.bind()返回函数
    • 需要再次调用, 才能得到函数的返回结果

4. 应用场景:

  1. call经常做继承
  2. apply经常和数组有关系,比如借助于数学对象实现数组的max、min
  3. bind不调用函数,但改变this指向,比如改变定时器内部的this指向