call apply bind的區(qū)別詳解

看了網(wǎng)上的一些文章,感覺說的不夠詳盡。所以專門分三方面測試了三者區(qū)別。

先說相同點

call、apply、bind都可以傳入this對象和執(zhí)行參數(shù)。

區(qū)別在于,call、bind的執(zhí)行參數(shù)使用可變參數(shù)的形式傳入,apply的執(zhí)行參數(shù)使用數(shù)組的形式傳入。

從這一點上看,似乎還缺一個applyBind函數(shù)(執(zhí)行參數(shù)用數(shù)組形式傳入的bind)。

接著我們看一下不同點

返回值

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

執(zhí)行時機

apply、call立刻執(zhí)行;bind只返回新函數(shù),不執(zhí)行,直到調(diào)用返回的新函數(shù)才執(zhí)行

返回值和執(zhí)行時機的區(qū)別,可以通過下圖的代碼查看

作用周期

call、apply只對本次執(zhí)行有效,bind的返回函數(shù)長久有效,且不可更改。

如下圖代碼,當bind綁定了參數(shù)后,即使在執(zhí)行時設(shè)置新的參數(shù),但是實際使用的仍然時綁定時的參數(shù)

如果,我們對bind的函數(shù),使用call再次修改this對象和參數(shù)會發(fā)生什么?

參考下圖代碼,只要bind后,即使再次call,也無法改變bind的this對象和執(zhí)行參數(shù)。

可見,bind()函數(shù)返回的對函數(shù)對象,this和執(zhí)行參數(shù)都是無法修改的。

換另一種方法,試圖修改bind的this對象,結(jié)果也是失敗的,如下圖



最后,嘗試對bind過的函數(shù)進行二次bind,會發(fā)現(xiàn)二次bind也無法改變this對象和參數(shù),如下圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容