返回

函数的调动者——call、apply、bind

前端

call、apply、bind简介
在JavaScript中,函数可以作为参数传递给其他函数,这被称为函数传递。函数传递可以让我们将代码组织成更小的模块,并提高代码的可重用性。

call、apply、bind都是函数调用方法,它们都可以改变函数的执行上下文,让函数在不同的对象上执行。

  • call() 方法接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数执行上下文的对象。
  • apply() 方法也接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数参数的对象数组。
  • bind() 方法接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数执行上下文的对象。bind()方法与call()方法和apply()方法的区别在于,bind()方法返回一个新的函数,而call()方法和apply()方法直接执行函数。

call、apply、bind区别

特性 call apply bind
参数个数 2+ 2+ 1+
参数类型 第一个参数是函数,第二个参数是对象,第三个参数开始是参数列表 第一个参数是函数,第二个参数是参数数组 第一个参数是函数,第二个参数是对象,第三个参数开始是参数列表
返回值 调用函数的返回值 调用函数的返回值 一个新的函数

call、apply、bind示例

以下示例演示了如何使用call、apply、bind来改变函数的执行上下文:

// 定义一个函数
function greet() {
  console.log(`Hello ${this.name}!`);
}

// 创建一个对象
const person = {
  name: 'John Doe'
};

// 使用call方法来改变函数的执行上下文
greet.call(person); // 输出: Hello John Doe!

// 使用apply方法来改变函数的执行上下文
greet.apply(person); // 输出: Hello John Doe!

// 使用bind方法来改变函数的执行上下文
const boundGreet = greet.bind(person);
boundGreet(); // 输出: Hello John Doe!

总结

call、apply、bind都是JavaScript中的函数调用方法,它们都可以改变函数的执行上下文,让函数在不同的对象上执行。

  • call()方法接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数执行上下文的对象。
  • apply()方法也接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数参数的对象数组。
  • bind()方法接受两个参数:第一个参数是要调用的函数,第二个参数是要作为函数执行上下文的对象。bind()方法与call()方法和apply()方法的区别在于,bind()方法返回一个新的函数,而call()方法和apply()方法直接执行函数。