JavaScript函数中call apply bind的讲解说明


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));

如果不用 bindthis 就会变成按钮,导致 sayHi 里的 this.name 出错。


总结一句话

方法 立即执行 参数 返回新函数 用途
call 逗号分隔 立即执行,快速换 this
apply 数组 参数是数组的情况
bind 逗号分隔 延迟执行,this 永远绑好

记忆口诀

call(叫),apply(应用),马上干活;bind(绑),先绑后用。


余华各部书籍的语录

JavaScript 中Date对象详解(全面版)

评 论
请登录后再评论