call&apply&bind的区别

相同点:都是用来改变this指向

不同点:

call()的第一个参数是this要指向的对象,后面传入的是参数列表,参数可以是任意类型,当第一个参数为null、undefined的时候,默认指向window;

apply接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。

注:apply 和 call 的用法几乎相同, 唯一的差别在于:当函数需要传递多个变量时, apply 可以接受一个数组作为参数输入, call 则是接受一系列的单独变量。

bind和call很相似,第一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。

call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍。

   ```  

let obj1 = {

name:"john1",

sayHello:function(a,b){

console.log(this.name);

console.log(a,b);

}

}

let obj2 = {

name:"john2"

}

//call  参数列表

//apply 参数数组

obj1.sayHello.call(obj2,10,20);

//默认情况下,sayHello里的this应该指向obj1的,但是call改变this指向,让其指向call的第一个参数

obj1.sayHello.apply(obj2,[10,20]);

obj1.sayHello.bind(obj2)(10,20);

```

可以用apply取数组中的最大值和最小值

```

//取数组中的最大值和最小值

let arr = [10,32,-2,57,13];

let minVal = Math.min.apply(null,arr);

console.log(minVal);

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容