call(),apply()和bind()三个方法之间的区别

93 阅读1分钟

(1) call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,当 第一个参数为null、undefined的时候,默认指向window。
在 ES6 的箭 头函数下, call 和 apply 将失效,因为箭头函数内部没有自己的this
(2)第二个参数才有区别:
a. call的第二个参数是用逗号分隔的参数列表形式
b. apply的第二个参数是数组的形式
c. bind的使用和call相似,但是bind的返回值是函数 ,bind 方法不会 立即执行,而是返回一个改变了上下文 this 后的函数;而call和apply 是立即执行的

(3)应用场景
a.求数组中最大值与最小值

var arr = [1,2,3,89,46]
var max = Math.max.apply(null,arr)//89
var min = Math.min.apply(null,arr)//1

b.将伪数组转化为真数组

Array.prototype.slice.call(伪数组名)

c.数组追加

var arr1 = [1,2,3];
var arr2 = [4,5,6];
var total = arr1.push.apply(arr1, arr2);
console.log(arr1);  //[ 1, 2, 3, 4, 5, 6 ]