关于JS的 call()、apply()、bind()

关于JS的 call()、apply()、bind()
最新回答
红酒高跟鞋

2022-10-31 21:29:26

call()、apply()、bind() 都是 JavaScript 中用于改变函数执行时 this 指向的方法,但它们在参数传递和返回值上存在差异。

  • call()

    作用:立即调用函数,并指定 this 的指向。

    参数传递:第一个参数是 this 的指向对象,后续参数以逗号分隔依次传入。

    示例

    obj.myFun.call(_this, 'param1', 'param2');
  • apply()

    作用:立即调用函数,并指定 this 的指向。

    参数传递:第一个参数是 this 的指向对象,第二个参数必须是数组(或类数组对象),数组元素作为参数传入。

    示例

    obj.myFun.apply(_this, ['param1', 'param2']);
  • bind()

    作用:返回一个新函数,不会立即调用。新函数的 this 被永久绑定到第一个参数指定的对象。

    参数传递:第一个参数是 this 的指向对象,后续参数以逗号分隔依次传入(类似 call()),但返回的是函数,需手动调用执行。

    示例

    const boundFun = obj.myFun.bind(_this, 'param1', 'param2');boundFun(); // 手动调用

关键区别总结

  1. 调用方式:call() 和 apply() 立即执行函数,而 bind() 返回绑定后的函数需后续调用。
  2. 参数形式:call() 直接传参,apply() 通过数组传参,bind() 类似 call() 但延迟执行。
  3. 返回值:bind() 返回函数,其他两者返回函数执行结果。

使用场景建议

  • 需要立即执行且参数较少时用 call()。
  • 参数以数组形式存在时用 apply()(如类数组对象转参数)。
  • 需要预先绑定 this 并延迟执行时用 bind()(如事件处理函数)。