call、apply、bind都能改变函数this指向:call立即执行并逐个传参;apply立即执行但参数需数组形式;bind返回绑定this及预设参数的新函数,不立即执行。

这三个方法都能改函数里的 this,但用法和效果完全不同。关键不是“能不能改”,而是“什么时候改”“怎么传参”“返回什么”。
call:立刻执行,参数一个个列出来
它直接调用函数,并把 this 绑定到第一个参数指定的对象上,后面所有参数按顺序传进去。
- 语法:
fn.call(thisArg, arg1, arg2, ...) - 立即执行,不返回新函数
- 适合参数数量固定、已知的场景
apply:立刻执行,参数装进数组里传
功能和 call 一样,也是马上执行,只是第二个参数必须是数组(或类数组,比如 arguments)。
- 语法:
fn.apply(thisArg, [arg1, arg2, ...]) - 常用于把已有数组当作参数展开,比如
Math.max.apply(null, [1,5,3]) - 也常用在数组方法借用上,如
arr.push.apply(arr1, arr2)
bind:不执行,只生成一个新函数
它不会运行函数,而是返回一个 this 已绑定、部分参数已预设的新函数,之后可以随时调用。
- 语法:
const newFn = fn.bind(thisArg, arg1, arg2) - 返回的是函数,不是执行结果
- 绑定后的 this 无法被后续的
call/apply覆盖(除非用new调用) - 天然支持柯里化(参数预设),比如
const add5 = add.bind(null, 5)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











