这三者的共同作用都是改变函数的环境,也就是改变函数里面的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和其他两个传递的参数不同,它是传一个数组;