call apply bind 有什么区别
时间: 2023-09-14 08:09:25 浏览: 108
javascript中apply、call和bind的使用区别
`call()`、`apply()` 和 `bind()` 都是 JavaScript 中用来改变函数执行上下文的方法,它们之间的区别如下:
1. `call()` 和 `apply()` 都可以用来改变函数的执行上下文(即 `this` 指向),并立即执行该函数。它们的语法略有不同,`call()` 接受的参数是一个个单独的参数,而 `apply()` 接受的参数是一个数组。例如:
```javascript
function add(a, b) {
return a + b + this.c;
}
const obj = { c: 3 };
add.call(obj, 1, 2); // 6
add.apply(obj, [1, 2]); // 6
```
2. `bind()` 方法与 `call()` 和 `apply()` 的区别在于它不会立即执行函数,而是返回一个新的函数,该函数的 `this` 指向绑定的对象。例如:
```javascript
function add(a, b) {
return a + b + this.c;
}
const obj1 = { c: 3 };
const obj2 = { c: 5 };
const add1 = add.bind(obj1, 1, 2);
const add2 = add.bind(obj2, 1);
add1(); // 6
add2(2); // 8
```
在上面的示例中,我们使用 `bind()` 方法将 `add()` 函数绑定到两个不同的对象上,并将参数部分绑定为 `1` 和 `1, 2`,然后分别创建了两个新的函数 `add1()` 和 `add2()`。当我们调用这两个新函数时,它们的 `this` 指向分别为 `obj1` 和 `obj2`,并且它们的参数部分已经被绑定。
总的来说,`call()` 和 `apply()` 可以用于立即调用函数并改变执行上下文,而 `bind()` 则用于创建一个新的函数并绑定执行上下文,以便稍后调用。
阅读全文