相同点:
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 ,第二个参数被忽略