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(思路)
ctx = ctx ?? globalThis。- 用
Symbol避免属性名冲突:ctx[sym] = fn。 ctx[sym](...args),再delete。
apply 仅参数改为从数组展开。
手写 bind(思路)
返回函数内 fn.apply(预设ctx, concat(args));注意 new 绑定时用原型委托模拟(进阶题)。