call和apply的应用

相同点

都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行
var arrayLike = {
    0: 'item1',
    1: 'item2',
    2: 'item3',
    length: 3,
}
Array.prototype.forEach.call(arrayLike,function (item) {
  console.log(item)
})

不同点

  • call方法从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的func的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到func对应的第一个参数上,之后参数都为空

  • apply方法最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入func中,并且会被映射到func对应的参数上

原文地址:https://www.cnblogs.com/jerrypig/p/7723506.html