JS bind 和 apply 的区别 代码演示

24 min read

JS中,bind()和apply()都是用来改变函数执行时的上下文(this)的方法。它们的区别在于参数的传递方式和函数调用的时机。

bind():

bind()方法创建一个新的函数,该函数绑定了指定的上下文(this)和参数。它不会立即调用函数,而是返回一个新的函数,你可以稍后调用它。

function greet(name) {
  console.log('Hello ' + name + ', welcome to ' + this.city);
}

const obj1 = {
  city: 'New York'
};

const obj2 = {
  city: 'London'
};

const greetObj1 = greet.bind(obj1);
const greetObj2 = greet.bind(obj2);

greetObj1('Alice'); // 输出:Hello Alice, welcome to New York
greetObj2('Bob'); // 输出:Hello Bob, welcome to London

在上面的例子中,通过bind()方法绑定了不同的上下文(this),并创建了两个新的函数greetObj1和greetObj2。稍后调用这些函数时,它们将在相应的上下文中运行。

apply():

apply()方法立即调用函数,并绑定指定的上下文(this)和参数。它接受一个数组作为参数,数组中的每个元素将作为函数的参数传递进去。

function sum(a, b) {
  console.log(a + b);
}

const numbers = [2, 3];

sum.apply(null, numbers); // 输出:5

在上面的例子中,通过apply()方法将数组numbers的元素作为参数传递给sum函数,输出结果为2+3的和。

总结:

  • bind()方法返回一个新函数,不会立即调用,而apply()方法立即调用函数。
  • bind()方法绑定上下文和参数,并返回一个新函数,而apply()方法只能绑定上下文和参数数组。
  • bind()方法创建的新函数可以稍后再次调用,apply()方法在调用时立即执行函数。