美文网首页
call apply bind的区别详解

call apply bind的区别详解

作者: 银魂飞雪 | 来源:发表于2018-10-31 12:15 被阅读0次

    看了网上的一些文章,感觉说的不够详尽。所以专门分三方面测试了三者区别。

    先说相同点

    call、apply、bind都可以传入this对象和执行参数。

    区别在于,call、bind的执行参数使用可变参数的形式传入,apply的执行参数使用数组的形式传入。

    从这一点上看,似乎还缺一个applyBind函数(执行参数用数组形式传入的bind)。

    接着我们看一下不同点

    返回值

    apply、call没有返回值,bind有返回值。

    执行时机

    apply、call立刻执行;bind只返回新函数,不执行,直到调用返回的新函数才执行

    返回值和执行时机的区别,可以通过下图的代码查看

    作用周期

    call、apply只对本次执行有效,bind的返回函数长久有效,且不可更改。

    如下图代码,当bind绑定了参数后,即使在执行时设置新的参数,但是实际使用的仍然时绑定时的参数

    如果,我们对bind的函数,使用call再次修改this对象和参数会发生什么?

    参考下图代码,只要bind后,即使再次call,也无法改变bind的this对象和执行参数。

    可见,bind()函数返回的对函数对象,this和执行参数都是无法修改的。

    换另一种方法,试图修改bind的this对象,结果也是失败的,如下图

    最后,尝试对bind过的函数进行二次bind,会发现二次bind也无法改变this对象和参数,如下图

    相关文章

      网友评论

          本文标题:call apply bind的区别详解

          本文链接:https://www.haomeiwen.com/subject/nlgotqtx.html