apply
- apply(this的指向,[函數(shù)的參數(shù),以數(shù)組形式傳參])
- 如果第一個(gè)參數(shù)未null或者undefined,那么this默認(rèn)指向window
- 此方法會(huì)將原函數(shù)立即執(zhí)行,并且知識(shí)臨時(shí)改變一次this的指向
call
- call(this的指向,參數(shù)1,參數(shù)2,參數(shù)3......)
- 參數(shù)為參數(shù)列表形式,且必須一次性傳入所有參數(shù)
- 如果第一個(gè)參數(shù)未null或者undefined,那么this默認(rèn)值指向window
- 此方法會(huì)將原函數(shù)立即執(zhí)行,并且知識(shí)臨時(shí)改變一次this的指向
bind
- bind(this的指向,參數(shù)1,參數(shù)2,參數(shù)3......)
- 參數(shù)為參數(shù)列表形式,參數(shù)可以分批次傳入,最后函數(shù)執(zhí)行的會(huì)將參數(shù)連在一起傳入
- 如果第一個(gè)參數(shù)未null或者undefined,那么this默認(rèn)值指向window
- 此方法不會(huì)將原函數(shù)立即執(zhí)行,他會(huì)返回一個(gè)永久改變this指向的函數(shù)
小結(jié)
- 相同點(diǎn)
- 都可以改變this的指向
- 當(dāng)?shù)谝粋€(gè)參數(shù)為null或undefined時(shí),this默認(rèn)指向window
- 可以利用上一個(gè)特點(diǎn)求取一個(gè)數(shù)組中的最大值
var arr=[1,10,5,8,3,12];
//apply實(shí)現(xiàn)
console.log(Math.max.apply(null, arr)); //12
//call實(shí)現(xiàn)
console.log(Math.max.call(null,arr[0],arr[1],arr[2],arr[3],arr[4],arr[5])); //12
//bind實(shí)現(xiàn)
var max=Math.max.bind(null,arr[0],arr[1],arr[2],arr[3])
console.log(max(arr[4],max(arr[5])); //12,分兩次傳參
- 不同點(diǎn)
- apply和call會(huì)立即執(zhí)行原函數(shù),并且只是暫時(shí)改變this的指向
- bind不會(huì)立即執(zhí)行原函數(shù),而是返回一個(gè)永久改變this指向的函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。