✅ 1. call
- 作用:改变函数里的
this,让它立即执行。 - 参数怎么传:一个个传。
🟩 举例:
function sayHi(age) {
console.log(this.name + ' is ' + age + ' years old.');
}
const person = { name: 'Tom' };
sayHi.call(person, 25); // 输出:Tom is 25 years old.
👉 相当于:
“我借用 sayHi 这个函数,
this先指向 person,然后马上执行。”
✅ 2. apply
- 作用:跟
call一样,改变this,但参数必须用数组来传。 - 参数怎么传:放在数组里。
🟩 举例:
sayHi.apply(person, [30]); // 输出:Tom is 30 years old.
👉 相当于:
“跟 call 一样,区别是参数一股脑放数组里。”
🚩 实际用途:
如 Math.max 求最大值:
const nums = [5, 10, 2];
console.log(Math.max.apply(null, nums)); // 10
✅ 3. bind
- 作用:不立即执行,返回一个新的函数,
this绑定好。 - 参数怎么传:也是一个个传,可以提前占位参数。
🟩 举例:
const newSayHi = sayHi.bind(person, 35);
newSayHi(); // 输出:Tom is 35 years old.
👉 相当于:
“先把
this固定好,参数也先定一部分,等我以后再用。”
🚩 常见场景
const button = document.querySelector('button');
button.addEventListener('click', sayHi.bind(person, 40));
如果不用 bind,this 就会变成按钮,导致 sayHi 里的 this.name 出错。
✅ 总结一句话
| 方法 | 立即执行 | 参数 | 返回新函数 | 用途 |
|---|---|---|---|---|
| call | ✅ | 逗号分隔 | ❌ | 立即执行,快速换 this |
| apply | ✅ | 数组 | ❌ | 参数是数组的情况 |
| bind | ❌ | 逗号分隔 | ✅ | 延迟执行,this 永远绑好 |
✅ 记忆口诀
call(叫),apply(应用),马上干活;bind(绑),先绑后用。