call、apply 和 bind

JavaScript 中 `call`、`apply` 和 `bind` 的共同点与差异,以及它们和 this 绑定的关系。

#resource / javascript #type / concept #status / growing

[!info] related notes

call、apply 和 bind

这三个方法都和函数调用时的 this 指向有关。

一句话定义

  • call:立即调用函数,参数逐个传
  • apply:立即调用函数,参数以数组形式传
  • bind:不立即调用,返回一个绑定好 this 的新函数

最小例子

fn.call(obj, 1, 2)
fn.apply(obj, [1, 2])
const newFn = fn.bind(obj, 1, 2)

共同点

它们都能显式指定函数执行时的 this

差异

call

  • 立即执行
  • 适合已知参数列表的场景

apply

  • 立即执行
  • 适合参数已经在数组里的场景

bind

  • 不会立刻执行
  • 更像提前生成一个“this 已固定”的新函数
  • 适合事件回调、延迟执行、函数柯里化一类场景

最容易误解的点

  • bind 返回的是新函数,不是执行结果
  • 箭头函数没有自己的 this,所以对箭头函数使用这三者时,经常看不到预期效果

最短记忆方式

call/apply 立刻调,bind 先绑后用。

面试要点

来自 call-apply-bind-interview-question 的面试视角整理。

一句话回答

它们都能显式改变函数执行时的 this,区别在于 callapply 会立刻调用,bind 会返回一个绑定后的新函数。

最稳的回答主线

共同点

  • 都和 this 绑定有关

差异

  • call:参数逐个传,立刻执行
  • apply:参数数组传,立刻执行
  • bind:不立刻执行,返回新函数

场景化表达

  • 已知参数列表时常见 call
  • 参数天然就是数组时常见 apply
  • 事件回调、延迟执行时常见 bind

最短记忆方式

call/apply 直接调,bind 返回新函数。

创建于 2026/3/19 更新于 2026/5/27