apply, call ,bind 三者的相同点及区别

相同点:

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

  

猜你喜欢

转载自www.cnblogs.com/zhangshilei/p/12193916.html