白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

JavaScript-面试-call-apply-bind

2026年10月16日·Admin·2 次浏览

面试题:call、apply、bind 区别?手写思路?

作用

显式指定函数运行时 this,并可传参。

参数形式 是否立即执行
call 逐个列举 fn.call(ctx, a, b) 是
apply 数组/类数组 fn.apply(ctx, [a,b]) 是
bind 返回新函数,可柯里化传参 否(调用新函数时执行)

bind 特点

  • 返回的函数 this 永久绑定(除非 new 构造绑定函数——有特例,面试可提规范细节)。
  • 常用:类组件里把方法绑到实例、偏函数。

手写 call(思路)

  1. ctx = ctx ?? globalThis。
  2. 用 Symbol 避免属性名冲突:ctx[sym] = fn。
  3. ctx[sym](...args),再 delete。

apply 仅参数改为从数组展开。

手写 bind(思路)

返回函数内 fn.apply(预设ctx, concat(args));注意 new 绑定时用原型委托模拟(进阶题)。

© 2025 My Blog. Built with Nuxt.js v4