ES6箭頭函數(shù)(Arrow Functions)

箭頭函數(shù)是什么箕母?(What)

箭頭函數(shù) (Arrow Functions)也稱“胖箭頭函數(shù)”储藐,是ES6全新的特性。是個簡寫的函數(shù)表達(dá)式嘶是,擁有詞法作用域的this钙勃。此外,箭頭函數(shù)總是匿名的聂喇。(詞法作用域就是一個變量的作用在定義的時候就已經(jīng)被定義好辖源,當(dāng)在本作用域中找不到變量,就會一直向父作用域中查找希太,直到找到為止克饶。)

箭頭函數(shù)的語法(How)

  • ()=>{return 1;}

函數(shù)無參數(shù),返回值為1

  • (x)=>x*x;

返回值為參數(shù)的平方跛十,當(dāng)函數(shù)體只有一條語句時彤路,則可以省略大括號{},默認(rèn)返回該表達(dá)式的值芥映。

  • x=>x*x;

只有一個參數(shù)時洲尊,則可以省略小括號()

  • ()=>{……return 1;}

返回值為1。(使用塊語句的箭頭函數(shù)不會自動返回值奈偏,需要使用return語句將所需的值返回)

  • ()=>({})

返回值為對象

箭頭函數(shù)的特性

1坞嘀、typeof運(yùn)算符和普通的函數(shù)一樣

let commFunc = () => {};
console.log(typeof commFunc);

輸出為function

let arrowFunc = () => {};
console.log(typeof arrowFunc);

輸出也為function惊来。
從此可以看出箭頭函數(shù)的類型和普通的函數(shù)一樣都為function丽涩。

2、instanceof也返回true裁蚁,表明是Function的實(shí)例

let func = () => {};
console.log(func instanceof Function);

輸出為true矢渊,由此可以看出箭頭函數(shù)也是Function的實(shí)例

3、箭頭函數(shù)中的this繼承外圍作用域

let person = {
    name: "galler",
    say: () => {
        console.log(this);
        console.log(this.name);
    }
};
person.say();

this的值為"{}"或window枉证,this.name的值為undefined或""(空字符串)矮男。將上面的這段代碼寫在文件中,在node環(huán)境中運(yùn)行室谚,this的值輸出為"{}"毡鉴,這個空對象就是exports崔泵,因?yàn)闆]有寫exportsexports就默認(rèn)指向module.exports,而module.exports就是個空對象猪瞬。但是在命令行中運(yùn)行上面代碼(依然是node環(huán)境中)憎瘸,則this指向global對象(這些有可能偏離中心,但是大家可以試試陈瘦,在這段代碼前加上exports.name = "susan",此時的this指向{"name","susan"}對象,this.name的值就是susan

let person = {
    name: "galler",
    speak: function() {
        console.log(this); 
        console.log(this.name); 
    }
};
person.speak();

this的值為person對象幌甘,this.name的值為galler。

小結(jié):箭頭函數(shù)本身沒有this甘晤。在上面的demo中根據(jù)詞法作用域含潘,于是向上查找this,則發(fā)現(xiàn)this指向window對象(瀏覽器環(huán)境)或者{}(Node環(huán)境中)线婚,由于window和{}對象沒有name屬性遏弱,則this.name為""(瀏覽器環(huán)境)或者undefined(Node環(huán)境)

4、返回對象用小括號括起來

let person = () => {    
    name:"galler"
}
console.log(person()); 

輸出為undefined塞弊。此時的"{}"表明函數(shù)的起始位置和結(jié)束位置漱逸,由于該函數(shù)沒有返回值,所以被調(diào)用時值為undefined

let person = () => ({    
    name:"galler"
});
console.log(person());

輸出為{name:"galler"}游沿。 此時"{}"表示定義一個對象饰抒。用"()"括起來表示是一個表達(dá)式,默認(rèn)返回該對象诀黍。

5袋坑、箭頭函數(shù)中不能使用new

let Person = (name) => {
    this.name = name;
};
let one = new Person("galler");

運(yùn)行該程序,則出現(xiàn)TypeError: Person is not a constructor

6眯勾、arguments

function person() {
    console.log(arguments);
}
person(1);

一般的函數(shù)使用arguments枣宫,在瀏覽器中輸出為一個數(shù)組:[1],在Node環(huán)境中輸出為一個對象:{'0':1}

let person = () => {    
    console.log(arguments);
};
person("galler");

箭頭函數(shù)使用arguments吃环,在瀏覽器環(huán)境中也颤,則出現(xiàn)ReferenceError,在Node環(huán)境中輸出{"0":{}郁轻,……}翅娶。
由此可以得出,箭頭函數(shù)與普通函數(shù)的再一個區(qū)別:不能使用arguments對象好唯。

7竭沫、沒有原型

let person = () => {}
console.log(person.prototype); 

輸出為undefined。由此可以看出箭頭函數(shù)沒有原型骑篙。

箭頭函數(shù)產(chǎn)生的目的

  • 簡潔語法
  • 與父作用域共享關(guān)鍵字this

箭頭函數(shù)的優(yōu)點(diǎn)

  • 使用箭頭函數(shù)比普通函數(shù)少些動詞输吏,如:functionreturn
  • this提前定義,從上下文可以捕獲this替蛉。

注意:箭頭函數(shù)內(nèi)容實(shí)體中不能使用statement作為表達(dá)式expression贯溅。

事物都是有兩面性的,所以箭頭函數(shù)的優(yōu)點(diǎn)即缺點(diǎn)躲查。代碼太過簡單它浅,導(dǎo)致不好閱讀,this提前定義镣煮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐霍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子典唇,更是在濱河造成了極大的恐慌镊折,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件介衔,死亡現(xiàn)場離奇詭異恨胚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)炎咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門赃泡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乘盼,你說我怎么就攤上這事升熊。” “怎么了绸栅?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵级野,是天一觀的道長。 經(jīng)常有香客問我粹胯,道長蓖柔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任矛双,我火速辦了婚禮渊抽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘议忽。我一直安慰自己懒闷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布栈幸。 她就那樣靜靜地躺著愤估,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速址。 梳的紋絲不亂的頭發(fā)上玩焰,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音芍锚,去河邊找鬼昔园。 笑死蔓榄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的默刚。 我是一名探鬼主播甥郑,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荤西!你這毒婦竟也來了澜搅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邪锌,失蹤者是張志新(化名)和其女友劉穎勉躺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觅丰,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饵溅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舶胀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概说。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嚣伐,靈堂內(nèi)的尸體忽然破棺而出糖赔,到底是詐尸還是另有隱情,我是刑警寧澤轩端,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布放典,位于F島的核電站,受9級特大地震影響基茵,放射性物質(zhì)發(fā)生泄漏奋构。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一拱层、第九天 我趴在偏房一處隱蔽的房頂上張望弥臼。 院中可真熱鬧,春花似錦根灯、人聲如沸径缅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纳猪。三九已至,卻和暖如春桃笙,著一層夾襖步出監(jiān)牢的瞬間氏堤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工搏明, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼠锈,地道東北人闪檬。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像购笆,于是被迫代替她去往敵國和親谬以。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)由桌,也就是一...
    悟名先生閱讀 4,149評論 0 13
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值邮丰,只能采用變通的方法行您。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,384評論 0 1
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,781評論 0 1
  • 2018年已經(jīng)過去六分之一的時間,回望一二月份剪廉,似乎都處于一種失控的生活和工作狀態(tài)娃循,缺少計劃性和自律性。 ...
    shellyshi閱讀 288評論 0 0
  • 整型: byte 占1個字節(jié) short 占2個字節(jié) int 占4個字節(jié) ...
    如思如是閱讀 217評論 1 4