call、apply 和 bind 的区别

call、apply 和 bind 的区别

  1. 不传递参数的情况
    function foo(a,b,c){

    console.log(typeof this);
    console.log(a,b,c)
    

    }

    console.log(‘============call()============’)
    console.log(foo.call())
    console.log(‘============call()============’)
    call 会让函数执行

    console.log(‘============apply()============’)
    console.log(foo.apply())
    console.log(‘============apply()============’)
    apply 会让函数执行

    console.log(‘============bind()============’)
    console.log(foo.bind())
    console.log(‘============bind()============’)
    bind 不会执行这个函数,会复制函数

    function foo1 (a,b,c) {

    console.log(this)
    console.log(a,b,c)
    

    }

    console.log(‘============call(new Date())============’)
    console.log(foo.call(new Date()))
    console.log(‘============call(new Date())============’)
    call 调用并改变函数执行时this指向

    console.log(‘============apply(new Date())============’)
    console.log(foo.apply(new Date()))
    console.log(‘============apply(new Date())============’)
    apply 调用并改变函数执行时this指向

    console.log(‘============bind(new Date())============’)
    console.log( foo.bind(new Date())())
    console.log(‘============bind(new Date())============’)
    bind 只是改变this !!!!不会立即执行!!!!

    function foo2 (a,b,c){

    connsole.log(a,b,c)
    

    }

    console.log(‘============call(null)============’)
    console.log(foo.call(null, 1, 2, 3)) // => foo.call(null, 1, 2, 3)
    console.log(‘============call(null)============’)
    call 调用并改变函数执行时this指向,并通过后续的参数指定函数调用时的实参

    console.log(‘============apply(null)============’)
    console.log(foo.apply(null, [1, 2, 3]))
    console.log(‘============apply(null)============’)
    apply 调用并改变函数执行时this指向,并将第二参数(必须是数组!!!)作为实参传入

    console.log(‘============bind(null)============’)
    console.log(foo.bind(null, 1, 2, 3))
    console.log(‘============bind(null)============’)
    bind 只是改变this !!!!!不会立即执行!!!!! 如果需要指定调用时的实参可以参考call

总结:apply 、call 二者而言,作用完全一样,只是接受参数的方式不同而已,call的传参方式是一个个传的,而apply是以数组的形式从传参的,bind是在ES5中扩展的(IE6,7,8不支持),它是改变上下文的this指向。它跟call很相似。bind的返回值是函数,它的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

文章目录
  1. 1. call、apply 和 bind 的区别
,