箭頭函數(shù)和普通函數(shù)的區(qū)別

??周末在阿里淘寶的電話面試中被問到箭頭函數(shù)和普通函數(shù)的區(qū)別,沒能回答全面蜒犯,現(xiàn)進行總結(jié)如下:

??ES6標準新增了一種新的函數(shù):Arrow Function(箭頭函數(shù))矢洲,為什么叫Arrow Function百拓?因為它的定義用的就是一個箭頭泥彤,那么,它和普通函數(shù)有哪些不同呢蝌借?

箭頭函數(shù)的特點

??箭頭函數(shù)相當于匿名函數(shù)田柔,并且簡化了函數(shù)定義。箭頭函數(shù)有兩種格式骨望,一種只包含一個表達式硬爆,連{ ... }和return都省略掉了。還有一種可以包含多條語句擎鸠,這時候就不能省略{ ... }和return缀磕。

  • 相比普通函數(shù),箭頭函數(shù)有更簡潔的語法
  • 箭頭函數(shù)不綁定this,會捕獲其所在的上下文的this值袜蚕,作為自己的this值
    • 函數(shù)體內(nèi)的this對象糟把,就是定義時所在的對象,而不是使用時所在的對象牲剃。
    • 把動態(tài)this轉(zhuǎn)換為靜態(tài)this:長期以來遣疯,JavaScript 語言的this對象一直是一個令人頭痛的問題,在對象方法中使用this凿傅,必須非常小心缠犀。箭頭函數(shù)”綁定”this,很大程度上解決了這個困擾聪舒。
    • 箭頭函數(shù)可以讓this指向固定化辨液,這種特性很有利于封裝回調(diào)函數(shù)。
    • 原理: this指向的固定化箱残,并不是因為箭頭函數(shù)內(nèi)部有綁定this的機制滔迈,實際原因是箭頭函數(shù)根本沒有自己的this,導致內(nèi)部的this就是外層代碼塊的this被辑。正是因為它沒有this燎悍,所以也就不能用作構(gòu)造函數(shù)鲜滩。
  • 箭頭函數(shù)是匿名函數(shù)刹淌,不能作為構(gòu)造函數(shù)抡柿,不可以使用new命令扩所,否則會拋出一個錯誤。所以箭頭函數(shù)也不具有new.target郎楼。

    原因:構(gòu)造函數(shù)的new都做了些什么?簡單來說,分為四步

    • JS內(nèi)部首先會先生成一個對象举哟;
    • 再把函數(shù)中的this指向該對象;
    • 然后執(zhí)行構(gòu)造函數(shù)中的語句迅矛;
    • 最終返回該對象實例妨猩。
  • 箭頭函數(shù)不綁定arguments,取而代之用rest參數(shù)...解決秽褒;所以箭頭函數(shù)也沒有arguments.callee和arguments.caller

    ??不可以使用arguments對象壶硅,該對象在函數(shù)體內(nèi)不存在。如果要用销斟,可以用 rest 參數(shù)代替庐椒。想要在箭頭函數(shù)中以類似數(shù)組的形式取得所有參數(shù),可以利用展開運算符來接收參數(shù)蚂踊,比如:
    const testFunc = (...args)=>{ console.log(args) //數(shù)組形式輸出參數(shù) }
    ??在 ECMAScript 6 之前的函數(shù)聲明中约谈,它們的參數(shù)都是“簡單參數(shù)類型”的。在 ECMAScript 6 之后,凡是在參數(shù)聲明中使用了缺省參數(shù)棱诱、剩余參數(shù)和模板參數(shù)之一的泼橘,都不再是“簡單的”(non-simple parameters)。
    ??在使用傳統(tǒng)的簡單參數(shù)時迈勋,只需要將調(diào)用該參數(shù)時傳入的實際參數(shù)與參數(shù)對象(arguments)綁定就可以了炬灭;而使用“非簡單參數(shù)”時,需要通過“初始器賦值”來完成名字與值的綁定靡菇。
    ??兩種綁定模式的區(qū)別在于:通常將實際參數(shù)與參數(shù)對象綁定時重归,只需要映射兩個數(shù)組的下標即可,而“初始器賦值”需要通過名字來索引值(以實現(xiàn)綁定)镰官,因此一旦出現(xiàn)“重名參數(shù)”就無法處理了提前。

  • 使用call()、apply()和bind()調(diào)用泳唠,對 this 沒有什么影響

    由于 this 已經(jīng)在詞法層面完成了綁定狈网,通過 call()、 apply()笨腥、bind() 方法調(diào)用一個函數(shù)時拓哺,只傳入了一個參數(shù),對 this 并沒有什么影響

  • 箭頭函數(shù)沒有原型屬性prototype
  • 不能簡單返回對象字面量

    如果要直接返回對象時需要用小括號包起來脖母,因為大括號被占用解釋為代碼塊了

  • 不能使用yield關鍵字士鸥,因此箭頭函數(shù)不能用作 Generator 函數(shù)。
  • 箭頭函數(shù)括號后面不能換行谆级;
  • 箭頭函數(shù)不具有super烤礁。

總結(jié)

  • 箭頭函數(shù)的 this 永遠指向其上下文的 this ,任何方法都改變不了其指向肥照,如 call() , bind() , apply() 脚仔,可以說正是因為沒有自己的this,才使其具備了以上介紹的大部分特點舆绎;
  • 普通函數(shù)的this指向調(diào)用它的那個對象鲤脏。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吕朵,隨后出現(xiàn)的幾起案子猎醇,更是在濱河造成了極大的恐慌,老刑警劉巖努溃,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硫嘶,死亡現(xiàn)場離奇詭異,居然都是意外死亡梧税,警方通過查閱死者的電腦和手機沦疾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門则拷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曹鸠,你說我怎么就攤上這事煌茬。” “怎么了彻桃?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵坛善,是天一觀的道長。 經(jīng)常有香客問我邻眷,道長眠屎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任肆饶,我火速辦了婚禮改衩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驯镊。我一直安慰自己葫督,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布板惑。 她就那樣靜靜地躺著橄镜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冯乘。 梳的紋絲不亂的頭發(fā)上洽胶,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音裆馒,去河邊找鬼姊氓。 笑死,一個胖子當著我的面吹牛喷好,可吹牛的內(nèi)容都是我干的翔横。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绒窑,長吁一口氣:“原來是場噩夢啊……” “哼棕孙!你這毒婦竟也來了舔亭?” 一聲冷哼從身側(cè)響起些膨,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钦铺,沒想到半個月后订雾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡矛洞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年洼哎,在試婚紗的時候發(fā)現(xiàn)自己被綠了烫映。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡噩峦,死狀恐怖锭沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情识补,我是刑警寧澤族淮,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站凭涂,受9級特大地震影響祝辣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜切油,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一蝙斜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澎胡,春花似錦孕荠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巢株,卻和暖如春槐瑞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阁苞。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工困檩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人那槽。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓悼沿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骚灸。 傳聞我的和親對象是個殘疾皇子糟趾,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容