共同点:
第一个参数都为改变this的指针。若第一参数为null/undefined,this默认指向window
差异点如下:
1.call(无数个参数)
第一个参数:改变this指向 第二个参数:实参 使用之后会自动执行该函数
function fn(a,b,c){
console.log(this,a+b+c); // this指向window
}
fn();
fn.call(document,1,2,3);//call改变之后this指向document
//输出 #document 6 1,2,3是实参 结果相加为6
2.apply(两个参数)
第 一个参数:改变this指向 第二个参数:数组(里面为实参) 使用时候会自动执行函数
function fn(a,b,c){
console.log(this,a+b+c);
}
fn();
fn.apply(document,[1,2,3]);
3.bind(无数个参数)
第一个参数:改变this指向 第二个参数之后:实参 返回值为一个新的函数 使用的时候需要手动调用下返回 的新函数(不会自动执行)
function fn(a,b,c){
console.log(this,a+b+c); //window
}
let aa = fn.bind('小明',1,2,3); //手动调用一下
aa();
注意:
call、apply与bind区别:前两个可以自动执行,bind不会自动执行,需要手动调用
call、bind与apply区别:前两个都有无数个参数,apply只有两个参数,而且第二个参数为数组