關于call,bind,apply區(qū)別

call,bind,apply 相同點都是改變this的指向跪解,傳入?yún)?shù)。不同的是 call apply返回函數(shù)結果, bind 返回新函數(shù).

apply 和 call 的區(qū)別是 call 方法接受的是若干個參數(shù)列表恨诱,而 apply 接收的是一個包含多個參數(shù)的數(shù)組搀矫。

bind()和call與apply不同。bind是新創(chuàng)建一個函數(shù)肉渴,然后把它的上下文綁定到bind()括號中的參數(shù)上房蝉,然后將它返回僚匆。

所以,bind后函數(shù)不會執(zhí)行搭幻,而只是返回一個改變了上下文的函數(shù)副本咧擂,而call和apply是直接執(zhí)行函數(shù)。

apply方法

apply接受兩個參數(shù)檀蹋,第一個參數(shù)是this的指向松申,第二個參數(shù)是函數(shù)接受的參數(shù),以數(shù)組的形式傳入续扔,且當?shù)谝粋€參數(shù)為null攻臀、undefined的時候,默認指向window(在瀏覽器中)纱昧,使用apply方法改變this指向后原函數(shù)會立即執(zhí)行刨啸,且此方法只是臨時改變thi指向一次。

日常用法:改變this指向

示例:

回調函數(shù)綁定this指向:

```

var name="martin";

var obj={

name:"lucy",

say:function(year,place){

console.log(this.name+" is "+year+" born from "+place);

}

};

var say=obj.say;

setTimeout(function(){

say.apply(obj,["1996","China"])

} ,0); //lucy is 1996 born from China,this改變指向了obj

say("1996"识脆,"China") //martin is 1996 born from China,this指向window设联,說明apply只是臨時改變一次this指向

```


call方法

call方法的第一個參數(shù)也是this的指向善已,后面?zhèn)魅氲氖且粋€參數(shù)列表(注意和apply傳參的區(qū)別)。當一個參數(shù)為null或undefined的時候离例,表示指向window(在瀏覽器中)换团,和apply一樣,call也只是臨時改變一次this指向宫蛆,并立即執(zhí)行艘包。

示例:

```

var arr=[1,10,5,8,3];

console.log(Math.max.call(null,arr[0],arr[1],arr[2],arr[3],arr[4])); //10

```

采納以參數(shù)列表的形式傳入,而apply以參數(shù)數(shù)組的形式傳入耀盗。


bind方法

bind方法和call很相似想虎,第一參數(shù)也是this的指向,后面?zhèn)魅氲囊彩且粋€參數(shù)列表(但是這個參數(shù)列表可以分多次傳入叛拷,call則必須一次性傳入所有參數(shù))舌厨,但是它改變this指向后不會立即執(zhí)行,而是返回一個永久改變this指向的函數(shù)忿薇。

示例:

```

var arr=[1,10,5,8,12];

var max=Math.max.bind(null,arr[0],arr[1],arr[2],arr[3])

console.log(max(arr[4])); //12裙椭,分兩次傳參

```

可以看出,bind方法可以分多次傳參署浩,最后函數(shù)運行時會把所有參數(shù)連接起來一起放入函數(shù)運行

apply揉燃,call,bind三者的區(qū)別

三者都可以改變函數(shù)的this對象指向瑰抵。

三者第一個參數(shù)都是this要指向的對象你雌,如果如果沒有這個參數(shù)或參數(shù)為undefined或null器联,則默認指向全局window二汛。

三者都可以傳參,但是apply是數(shù)組拨拓,而call是參數(shù)列表肴颊,且apply和call是一次性傳入?yún)?shù),而bind可以分為多次傳入渣磷。

bind 是返回綁定this之后的函數(shù)婿着,便于稍后調用;apply 醋界、call 則是立即執(zhí)行 竟宋。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市形纺,隨后出現(xiàn)的幾起案子丘侠,更是在濱河造成了極大的恐慌,老刑警劉巖逐样,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜗字,死亡現(xiàn)場離奇詭異打肝,居然都是意外死亡,警方通過查閱死者的電腦和手機挪捕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門粗梭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人级零,你說我怎么就攤上這事断医。” “怎么了奏纪?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵孩锡,是天一觀的道長。 經(jīng)常有香客問我亥贸,道長躬窜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任炕置,我火速辦了婚禮荣挨,結果婚禮上,老公的妹妹穿的比我還像新娘朴摊。我一直安慰自己默垄,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布甚纲。 她就那樣靜靜地躺著口锭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪介杆。 梳的紋絲不亂的頭發(fā)上鹃操,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音春哨,去河邊找鬼荆隘。 笑死,一個胖子當著我的面吹牛赴背,可吹牛的內容都是我干的椰拒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼凰荚,長吁一口氣:“原來是場噩夢啊……” “哼燃观!你這毒婦竟也來了?” 一聲冷哼從身側響起便瑟,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤缆毁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胳徽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體积锅,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡爽彤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缚陷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片适篙。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖箫爷,靈堂內的尸體忽然破棺而出嚷节,到底是詐尸還是另有隱情,我是刑警寧澤虎锚,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布硫痰,位于F島的核電站,受9級特大地震影響窜护,放射性物質發(fā)生泄漏效斑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一柱徙、第九天 我趴在偏房一處隱蔽的房頂上張望缓屠。 院中可真熱鬧,春花似錦护侮、人聲如沸敌完。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滨溉。三九已至,卻和暖如春长赞,著一層夾襖步出監(jiān)牢的瞬間晦攒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工涧卵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勤家,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓柳恐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親热幔。 傳聞我的和親對象是個殘疾皇子乐设,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容