相同点:
apply 、 call 、bind 三者都是用来改变函数的this对象的指向的,第一个参数都是this要指向的对象
不同点:
call和aplly的区别只是在与参数不同,call的第二个参数是目标函数的第一个参数,第三个是目标函数的第二个参数以此类推,apply的第二个参数是个数组,数组里面的每一项一次是目标函数的参数
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
tip:
偏函数:
bind() 的另一个最简单的用法是使一个函数拥有预设的初始参数。只要将这些参数(如果有的话)作为 bind() 的参数写在 this 后面。当绑定函数被调用时,这些参数会被插入到目标函数的参数列表的开始位置,传递给绑定函数的参数会跟在它们后面。
function list() {
return Array.prototype.slice.call(arguments);
}
function addArguments(arg1, arg2) {
return arg1 + arg2
}
var list1 = list(1, 2, 3); // [1, 2, 3]
var result1 = addArguments(1, 2); // 3
// 创建一个函数,它拥有预设参数列表。
var leadingThirtysevenList = list.bind(null, 37);
// 创建一个函数,它拥有预设的第一个参数
var addThirtySeven = addArguments.bind(null, 37);
var list2 = leadingThirtysevenList();
// [37]
var list3 = leadingThirtysevenList(1, 2, 3);
// [37, 1, 2, 3]
var result2 = addThirtySeven(5);
// 37 + 5 = 42
var result3 = addThirtySeven(5, 10);
// 37 + 5 = 42 ,第二个参数被忽略
原文:https://www.cnblogs.com/zhangshilei/p/12193916.html