call和apply的作用和区别
时间: 2024-05-04 10:18:00 浏览: 8
`call()` 和 `apply()` 都是 JavaScript 中用于调用函数的方法,它们的作用是改变函数运行时的 `this` 指向。
它们的区别在于传参的形式不同:
`call()` 方法的第一个参数是要绑定给函数的 `this` 值,后面的参数是传递给函数的参数,可以是一个列表,也可以是单个参数。
例如:
```javascript
function greet(name) {
console.log(`Hello, ${name}! My name is ${this.name}.`);
}
const person = { name: 'John' };
greet.call(person, 'Alice');
// Output: Hello, Alice! My name is John.
```
在这个例子中,我们使用 `call()` 方法将 `greet()` 函数中的 `this` 绑定到 `person` 对象,并传递了一个参数 `'Alice'`。
`apply()` 方法的第一个参数也是要绑定给函数的 `this` 值,但是后面的参数必须是一个数组或类数组对象。
例如:
```javascript
function sum(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
const result = sum.apply(null, numbers);
console.log(result);
// Output: 6
```
在这个例子中,我们使用 `apply()` 方法将 `sum()` 函数中的 `this` 绑定到 `null`,并传递了一个数组 `[1, 2, 3]`。
总的来说,`call()` 和 `apply()` 的作用是相同的,区别在于传参的形式。在实际使用中,可以根据具体需要选择使用哪种方法。