apply、call和bind区别

2019-2-26    分类: 前端资源

这三者的共同作用都是改变函数的环境,也就是改变函数里面的this。

var name='张'
var age=18

var obj={
 name:'三',
 age:17,
}

function test(c1='',c2='') {
    console.log(this.age+c1+c2)
}

test(); //18,直接调用this是

 

:它们第一参数都是要传入一个对象

test.call(obj);  //17
test.apply(obj); //17
test.bind(obj)();//17, bind返回的是一个函数,所以也可以这么写 (test.bind(obj))()

 

 

:传递的参数不同

test.call(obj,'a','b');     //17ab
test.apply(obj,['a','b']);  //17ab
test.bind(obj,'a','b')();   //17ab

 

总结:

第一个参数都传对象;

bind返回的是一个函数,剩下和call没什么区别;

apply和其他两个传递的参数不同,它是传一个数组;