call与apply

相同点:call和apply都是改变this指向的API

区别:call和apply的第二位参数的差别

let a=2
let b=3
function add(a,b){
  return a+b
}
console.log("call")
console.log(add.call(add,a,b))
console.log("apply")
console.log(add.apply(add,[a,b]))

由此可以看到call接受的是连续参数,apply接受的是数组参数

从运行效率上call比apply性能更佳,因为apply在最后执行的时候需要进行一次解构赋值。

bind

bind接受的参数和call一致,但是bind不会立即调用,他会生成一个新的函数,需要的时候再进行调用即可

function mul(a,b){
  return a*b
}
let x= mul.bind(add,2,3)
x()