三者皆有的功能,绑定函数一个新得作用域,然后传参
1、绑定作用域功能(主要功能)=> eg:
var color = "red";
var obj = {color: "blue"};
//测试函数,打印执行环境作用域下的color变量
function test() {
console.log(this.color);
}
//调用测试函数绑定不同的作用域
test.call(this); //结果: red 这里绑定的this其实也是window对象
test.call(window); //结果: red 绑定了window对象
test.call(obj); //结果: buue 绑定了obj这个对象
使用call和apply绑定作用域时候是没有区别的,bind这个函数会创建一个新的实例,其this的值会被绑定到传给bind()函数的值
eg:
var color = "red";
var obj = {color: "blue"};
function test() {
console.log(this.color);
}
//bind创建新的实例赋值给newfunction
//这时候newfunction的this已经绑定了obj这个变量了
var newfunction = test.bind(obj);
//调用新的方法,即使在全部变量中调用,this.color也是blue了
newfunction(); // 结果: blue
2、传参功能