返回
函数的调动者——call、apply、bind
前端
2024-01-05 13:45:46
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()方法直接执行函数。