call apply bind的区别详解

2018-10-31  本文已影响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对象和参数,如下图

上一篇下一篇

猜你喜欢

热点阅读