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ù)