js apply call bind
时间: 2023-04-22 12:02:02 浏览: 101
js中的apply、call、bind是三个函数方法,都可以用来改变函数的this指向。
apply和call的作用是一样的,都是改变函数的this指向,并且立即执行该函数。区别在于传入参数的方式不同,apply接收一个数组作为参数,而call则是一个一个参数传入。
bind则是返回一个新的函数,改变函数的this指向,但不会立即执行该函数,需要手动调用。
这三个方法在实际开发中经常用到,特别是在处理函数作为参数传递的情况下,可以方便地改变函数的执行环境。
相关问题
apply call bind
`apply`, `call`, 和 `bind` 都是 JavaScript 中用于调用函数的方法。
`apply` 和 `call` 都是用来改变函数执行时的上下文(即 this 的指向)的。它们的第一个参数都是要绑定给 this 的值。`apply` 的第二个参数是一个数组,它会被作为函数的参数传入;而 `call` 的第二个到第 n 个参数是直接传入函数的参数。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(addNumbers.apply(null, numbers)); // 6
console.log(addNumbers.call(null, ...numbers)); // 6
```
`bind` 方法也可以用来改变函数执行时的上下文,但是它不会立即执行函数,而是返回一个新的函数,这个函数的 this 值会绑定到 bind 的第一个参数。bind 的第二个到第 n 个参数也会被作为函数的参数传入。这个新函数可以稍后执行。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const addTwoNumbers = addNumbers.bind(null, 1, 2);
console.log(addTwoNumbers(3)); // 6
console.log(addTwoNumbers(4)); // 7
```
在这个例子中,`addTwoNumbers` 是一个新函数,它的 this 值被绑定到了 null,前两个参数被固定为 1 和 2。我们可以多次调用这个新函数,并传入第三个参数。
手动实现apply call bind方法
手动实现`apply()`, `call()`, 和 `bind()` 方法通常是在JavaScript函数式编程中涉及到高阶函数和函数柯里化(Currying)的概念。这三个方法主要用于改变函数的行为或者创建新的函数实例。
1. **apply()**:这个方法允许你在特定上下文中执行一个函数,提供一个数组作为参数列表。语法通常是`func.apply(context, argsArray)`,其中`context`是调用函数的对象,`argsArray`是一个包含所有参数的数组。
```javascript
function add(a, b) {
return a + b;
}
let sum = add.apply(this, [2, 3]); // 相当于 add(2, 3)
```
2. **call()**:它的工作原理与`apply()`相似,但是接收的是单个参数而不是数组。`func.call(context, arg1, arg2, ...)`会创建一个新的执行上下文,并将参数按顺序传递给函数。
```javascript
sum = add.call(this, 2, 3); // 同样是add(2, 3)
```
3. **bind()**: 这个方法返回一个新函数,该函数绑定到指定的上下文(`this`),并预先设置好部分参数。当你需要创建一个始终针对某个特定对象运行的版本的函数时,可以使用它。
```javascript
const boundAdd = add.bind(this, 2); // 创建了一个总是以2开始的加法函数
boundAdd(3); // 输出5,等同于 (this)(2, 3),这里this是绑定了的对象
```
阅读全文