前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,call、apply 和 bind 这三个方法各自的作用是什么?它们在参数传递方式、执行时机以及返回值上有哪些不同?请结合具体使用场景说明。

前端/移动开发技术原理JavaScript

考察说明

考查对 JavaScript 函数调用方式及 this 绑定机制的理解。

回答思路

  1. 【回答框架 1】call 和 apply 都是立即调用函数,并显式指定函数体内 this 的指向。call 接受参数列表,如 fn.call(thisArg, arg1, arg2);apply 接受参数数组,如 fn.apply(thisArg, [arg1, arg2])。两者唯一区别在于参数传递形式,其余行为一致。
  2. 【回答框架 2】bind 不立即执行函数,而是返回一个新函数,新函数的 this 被永久绑定为传入的 thisArg,且可以预设部分参数(柯里化)。新函数后续调用时,this 无法再被改变,即使使用 call 或 apply 也无法覆盖。
  3. 【回答框架 3】使用场景:call 常用于继承中调用父构造函数,或借用其他对象的方法;apply 适合参数以数组形式存在的情况,如 Math.max.apply(null, arr);bind 常用于事件处理函数、定时器回调中固定 this,或用于函数柯里化。
  4. 【回答框架 4】注意:在严格模式下,thisArg 为 null 或 undefined 时,this 不会被替换为全局对象,而是保持原值;非严格模式下会替换为全局对象。
  5. 【回答框架 5】箭头函数没有自己的 this,其 this 在定义时确定,因此 call、apply、bind 对箭头函数的 this 绑定无效,但 bind 仍可预设参数。
  6. 【关键点 1】call 和 apply 立即执行,bind 返回新函数延迟执行。
  7. 【关键点 2】call 传参数列表,apply 传参数数组,bind 传参数列表并支持预设。
  8. 【关键点 3】bind 返回的函数 this 永久绑定,无法被 call/apply 覆盖。
  9. 【关键点 4】箭头函数 this 不可被这些方法改变。
  10. 【关键点 5】严格模式下 null/undefined thisArg 不会替换为全局对象。
  11. 【易错点 1】混淆 bind 返回新函数与 call/apply 立即执行的区别。
  12. 【易错点 2】忽略严格模式对 null/undefined thisArg 的处理差异。
  13. 【易错点 3】误以为 bind 可以改变箭头函数的 this 指向。