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