摘要:來看看箭頭函數(shù)的情況可以發(fā)現(xiàn)在定時(shí)器這個(gè)匿名函數(shù)作用域里,所指向的對(duì)象,就是定義時(shí)所指的對(duì)象。對(duì)于構(gòu)造函數(shù)來說,它就是的實(shí)例。如下?lián)耍偨Y(jié)箭頭函數(shù)的三個(gè)優(yōu)點(diǎn)語法簡(jiǎn)潔,能夠?qū)懗銎恋膯涡泻瘮?shù)。
ES6新引入了箭頭函數(shù),它是一種表達(dá)簡(jiǎn)潔的函數(shù),下面我們來看看它有哪三個(gè)顯著優(yōu)勢(shì)。
假設(shè)定義了一個(gè)名為names的數(shù)組,如下:
現(xiàn)在需要給數(shù)組的每一項(xiàng)后面添加’Bos’這個(gè)字符串,如果用傳統(tǒng)的函數(shù)語句來實(shí)現(xiàn),我們會(huì)這么做:
(小注:因?yàn)橛昧四0遄址源死惺褂昧酥匾舴?` ’)
那么,使用箭頭函數(shù)可以怎么做?第一步,用 => 替代 function :
第二步,當(dāng)參數(shù)僅有一個(gè)的時(shí)候,可以把括弧省略,如下:
是不是看上去簡(jiǎn)潔了些?
第三步:無需顯示地寫return語句,箭頭函數(shù)內(nèi)置 return 功能。即,如果你只想使用箭頭函數(shù)返回什么東西的話,那么無需顯示地寫出 return 。如下:
這一步,除了刪除return語句之外,還把花括號(hào)也刪除了,并且把多行代碼濃縮成一行。是不是非常簡(jiǎn)潔?但在這需要注意的是,之所以刪除花括號(hào),是因?yàn)楹瘮?shù)體內(nèi)僅有一句想要返回的語句。
當(dāng)函數(shù)沒有參數(shù)的時(shí)候,箭頭函數(shù)還可以更進(jìn)一步的簡(jiǎn)潔,即把括弧給去掉,換成下劃線’_’。如下:
此處由于不需要形參,我們把括弧’ ( ) ’刪除用’ _ ’ 替代來假裝變量名,實(shí)際上你可以在此用任何你想用的變量名,反正他們也不會(huì)真正被用上。比如:
它們返回的都是’Cool Bos’組成的數(shù)組而已。
箭頭函數(shù)中的this關(guān)鍵字,指向的是定義時(shí)的對(duì)象,而不是使用時(shí)的對(duì)象。即,雖然在以往的函數(shù)中,this所指的對(duì)象只有在調(diào)用的時(shí)候才知道是誰,但是在箭頭函數(shù)中,它是固定不變的。我們拿兩個(gè)例子來比對(duì)一下:
傳統(tǒng)函數(shù)
無論輸出多少次p.age的值,都是0。因?yàn)樽鳛镻erson構(gòu)造函數(shù)實(shí)例的p對(duì)象,才是this所指的對(duì)象,而age這個(gè)私有屬性在構(gòu)造函數(shù)中已經(jīng)定義,this.age的值便是0。
箭頭函數(shù)
而用箭頭函數(shù)改寫后,打印出的p.age值每一次都不相同,每當(dāng)過去1秒,它的值+1。
我們?cè)賮砣齻€(gè)例子說明一下:
構(gòu)造函數(shù)里嵌套定時(shí)器的傳統(tǒng)寫法
可看到,函數(shù)體里最后一行this.val打印出來是0,但是定時(shí)器里每隔1秒打印出來的是值是NaN,因?yàn)樵诙〞r(shí)器里面的this指向的是window,然后在全局環(huán)境下并沒有找到window.val的值,所以是NaN。
對(duì)上面的函數(shù)稍作修改
在全局作用域下定義val這個(gè)變量,并給其賦值-10。
從結(jié)果可以看出,每隔1秒打印出來的值是全局作用域下的-10累加增1。
來看看箭頭函數(shù)的情況
可以發(fā)現(xiàn)在定時(shí)器這個(gè)匿名函數(shù)作用域里,this所指向的對(duì)象,就是定義時(shí)所指的對(duì)象。對(duì)于構(gòu)造函數(shù)來說,它就是Fn的實(shí)例p。所以,this.val的值基于0,每隔1秒增1。
最后補(bǔ)充一點(diǎn):目前的JavaScript版本把所有箭頭函數(shù)當(dāng)成匿名函數(shù),但我們可以用一個(gè)變量指向匿名函數(shù),以這種方式來仿造聲明函數(shù)(本文中的示例函數(shù)就是如此)。如下:
據(jù)此,總結(jié)箭頭函數(shù)的三個(gè)優(yōu)點(diǎn): 1. 語法簡(jiǎn)潔,能夠?qū)懗銎恋膯涡泻瘮?shù)。2. 內(nèi)置return語句,當(dāng)函數(shù)只想返回某個(gè)東西的時(shí)候,可以不必顯現(xiàn)地寫出return。3.this關(guān)鍵字無需重新指定,這在進(jìn)行事件綁定時(shí)會(huì)很有幫助。
需要補(bǔ)充的是,箭頭函數(shù)里面沒有arguments參數(shù),如果需要用到,可以這么寫(...arguments) => {...}。但是這種方法在嚴(yán)格模式下不適用。
翻譯自:http://wesbos.com/arrow-funct...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86491.html
摘要:如果該參數(shù)的值為或,則表示不需要傳入任何參數(shù),從開始可以使用類數(shù)組對(duì)象。當(dāng)使用操作符調(diào)用綁定函數(shù)時(shí),該參數(shù)無效。當(dāng)綁定函數(shù)被調(diào)用時(shí),這些參數(shù)將置于實(shí)參之前傳遞給被綁定的方法。 在了解call,apply之前需要先了解下javascrit中this指向 this的指向在ES5里面,this永遠(yuǎn)指向最后調(diào)用它的那個(gè)對(duì)象舉個(gè)栗子: var name = outerName; function...
摘要:函數(shù)綁定的方式一般有下面種方式綁定構(gòu)造函數(shù)中綁定然后可以使用時(shí)綁定使用箭頭函數(shù)以上三種方法,第一種最優(yōu)。因?yàn)榈谝环N構(gòu)造函數(shù)只在組件初始化的時(shí)候執(zhí)行一次,第二種組件每次都會(huì)執(zhí)行第三種在每一次時(shí)候都會(huì)生成新的箭頭函數(shù)。 這篇文章主要介紹了淺談react性能優(yōu)化的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 React性能優(yōu)化思路 軟件的性能優(yōu)化思路就像生...
閱讀 1465·2021-09-10 11:27
閱讀 2414·2019-08-30 15:53
閱讀 1333·2019-08-30 13:10
閱讀 2981·2019-08-30 11:09
閱讀 1092·2019-08-29 17:23
閱讀 672·2019-08-29 17:05
閱讀 2952·2019-08-29 15:10
閱讀 2349·2019-08-29 13:22