call apply bind的区别详解

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

先说相同点

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对象和参数,如下图


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容