问题:call、apply、bind的区别?

答:call, apply, 和 bind 是 JavaScript 中用于改变函数执行上下文的方法。

call: call 方法可以在函数调用时指定函数的执行上下文(即 this 的值)和传递参数列表。它接受一个指定的上下文对象作为第一个参数,后面是函数执行时需要传入的参数列表。函数会立即执行。

function greet() {
console.log(`Hello, ${this.name}`);
}

const person = { name: 'John' };

greet.call(person); // 输出:Hello, John

apply: apply 方法与 call 方法类似,但接受参数的方式略有不同。它接受一个指定的上下文对象作为第一个参数,第二个参数是一个数组或类数组对象,包含函数执行时需要传入的参数列表。函数会立即执行。

function greet(message) {
console.log(`${message}, ${this.name}`);
}

const person = { name: 'John' };

greet.apply(person, ['Hello']); // 输出:Hello, John

bind: bind 方法创建一个新函数,新函数的执行上下文被永久绑定到指定的上下文对象。bind 方法返回的是一个绑定了上下文的函数,不会立即执行。如果在绑定时传递了参数,它们会被预先填充到函数调用时的参数列表中。

function greet() {
console.log(`Hello, ${this.name}`);
}

const person = { name: 'John' };
const greetPerson = greet.bind(person);

greetPerson(); // 输出:Hello, John

总结:

call 和 apply 会立即执行函数并改变执行上下文,call 传递参数列表,apply 传递数组或类数组对象作为参数列表。
bind 创建一个新函数,永久绑定了指定的上下文对象,返回的函数需要手动调用才会执行。
三者都可以用来改变函数的执行上下文,使函数在不同的对象上执行。
展开
评论