call,apply,bind 的区别

apply call bind 是用来给函数指定 this 。

  1. call
    第一个参数是函数里面的 this,第 2,3,4,5… 个参数依次作为参数传给函数。

    1
    2
    3
    4
    function sum(a, b){
    return a + b
    }
    sum.call(sum, 1, 2)//3
  2. apply
    apply 和 call 类似,第一个参数是函数里面的 this,第二个参数是要传给函数的参数列表,类型是一个伪数组,apply 会把这个伪数组拆成一个个的参数传给函数。

    1
    2
    3
    4
    function sum(a, b){
    return a + b
    }
    sum.apply(sum, [1, 2])//3
  3. bind
    bind接受的参数和 call 一致,但是函数不直接调用,而是返回一个函数,在需要的时候调用。

    1
    2
    3
    4
    5
    function sum(a, b){
    return a + b
    }
    var newSum = sum.bind(sum, 1, 2)
    newSum() //3