bind和call apply的区别
时间: 2023-05-31 12:17:50 浏览: 130
### 回答1:
bind、call和apply都是用来改变函数中this的指向的方法。
bind方法会返回一个新的函数,这个新函数的this指向被绑定的对象,但不会立即执行。
call和apply方法都是立即执行函数,并且都会改变函数中this的指向。它们的区别在于传入参数的方式不同,call方法是将参数一个一个传入,而apply方法是将参数放在一个数组中传入。
举个例子:
```
var obj = {
name: 'Tom'
};
function sayHello(age) {
console.log('Hello, my name is ' + this.name + ', I am ' + age + ' years old.');
}
var newSayHello = sayHello.bind(obj);
newSayHello(18); // Hello, my name is Tom, I am 18 years old.
sayHello.call(obj, 18); // Hello, my name is Tom, I am 18 years old.
sayHello.apply(obj, [18]); // Hello, my name is Tom, I am 18 years old.
```
以上代码中,我们定义了一个对象obj和一个函数sayHello。使用bind方法将sayHello函数中的this指向obj,并返回一个新的函数newSayHello。使用call和apply方法直接调用sayHello函数,并将this指向obj,同时传入参数18。
### 回答2:
bind和call apply都是JavaScript中用来改变函数执行上下文的方法,但它们有些许区别。
bind方法会创建一个新函数,其this值会被绑定到指定的对象上。它接收一个参数,即想要将函数绑定到的对象。如果绑定的函数参数存在,则会将绑定函数的参数传递给原始函数,同时返回绑定后的新函数。如果绑定的函数没有参数,则直接返回一个绑定后的新函数。bind方法并不会立即调用函数,而是返回一个函数引用,需要手动调用函数才会执行。
call和apply则是直接调用函数,并且可以指定函数执行上下文。它们最主要的区别在于传递参数的方式不同。call方法接收的参数是一个参数列表,即需要传递给函数的参数直接列出来一个一个传递。apply方法接收的参数是一个数组,即需要传递给函数的参数通过数组的方式传递。另外,如果函数没有参数,那么使用call和apply的方式没有区别。
因此,如果我们想要在不同的上下文中调用函数,可以使用bind方法,在其他时候可以使用call和apply方法。同时,由于bind方法会创建新的函数引用,可能会占用一些内存空间,因此可考虑使用call和apply方法。
### 回答3:
bind、call和apply是JavaScript中三个非常重要的函数方法,它们都用于改变函数的this指向。虽然它们的作用类似,但是它们具体的使用方式有很大的不同。
bind()、call()和apply()都能够把一个函数的this指向指定为第一个参数中的对象,并且都可以传递多个参数给函数。具体差别如下:
1. bind():bind()方法常常用于多次调用同一函数,且该函数的this值不变。bind()方法会返回一个新函数,并且它的this值总是被指定为第一个参数。bind()方法的传参方式,与原函数相同,在调用时将参数以一个个单独的参数传入。
2. call():将具体的值,作为指定的this,传入并执行该函数。call()方法会在调用时执行指定函数,并且呈现出函数的this值为第一个参数的对象。call()方法的传参方式,将参数以一个个单独的参数传入。
3. apply():apply()的作用与call()类似,主要区别在于参数的传递方式,apply()会将参数直接传入数组。就是说,在调用apply()方法时,需要将需要绑定到this的对象作为第一个参数传入,第二个参数是一个数组、列表或类似数组的对象,该数组中的所有元素都将作为单独的参数传递给被调用的函数。
总之,bind()、call()和apply()都是用于改变函数的this指向,它们之间的区别主要在于传递参数的方式不同。在实际开发中,我们需要根据场景的需要选择不同的方法来使用。
阅读全文