成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編寫高質(zhì)量箭頭函數(shù)的5個(gè)優(yōu)秀做法

開發(fā) 前端
箭頭功能值得流行。它的語法簡潔明了,使用詞法綁定綁定 this,它非常適合作為回調(diào)。在本文中,通過了解決學(xué)習(xí)5個(gè)優(yōu)秀實(shí)踐,以便我們可以從中學(xué)習(xí)更多箭頭函數(shù)的知識,并從它身上獲得更多的好處。

 箭頭功能值得流行。它的語法簡潔明了,使用詞法綁定綁定 this,它非常適合作為回調(diào)。在本文中,通過了解決學(xué)習(xí)5個(gè)優(yōu)秀實(shí)踐,以便我們可以從中學(xué)習(xí)更多箭頭函數(shù)的知識,并從它身上獲得更多的好處。

[[314912]]

1. 箭頭函數(shù)名推斷

JS 中的箭頭函數(shù)是匿名(anonymous)的:函數(shù)的name屬性是''。

 

  1. (number=>number+1).name;//=>'' 

在調(diào)試會話或調(diào)用堆棧分析期間,匿名函數(shù)被標(biāo)記為anonymous。不幸的是,anonymous程序不提供有關(guān)正在執(zhí)行的代碼的任何線索。

這里是執(zhí)行匿名函數(shù)的代碼的調(diào)試會話:

 

編寫高質(zhì)量箭頭函數(shù)的5個(gè)最佳做法

 

右邊的調(diào)用堆棧由兩個(gè)標(biāo)記為anonymous的函數(shù)組成,我們無法從這樣的調(diào)用堆棧信息中獲得任何有用的信息。

幸運(yùn)的是,函數(shù)名推斷(ES2015的功能)可以在某些條件下檢測到函數(shù)名稱。名稱推斷的思想是JS 可以從其語法位置確定箭頭函數(shù)名稱:從保存函數(shù)對象的變量名稱中獲取。

我們來看看函數(shù)名稱推斷的工作原理:

 

  1. constincreaseNumber=number=>number+1;increaseNumber.name;//=>'increaseNumber' 

因?yàn)樽兞縤ncreaseNumber保存了箭頭函數(shù),所以 JS 決定使用increaseNumber作為該函數(shù)的名稱。因此,箭頭函數(shù)的名稱為 'increaseNumber'。

第1個(gè)實(shí)踐:

一個(gè)好的做法是使用函數(shù)名稱推斷來命名箭頭函數(shù)。

現(xiàn)在我們用使用名稱推斷的代碼檢查一個(gè)調(diào)試會話:

 

編寫高質(zhì)量箭頭函數(shù)的5個(gè)最佳做法

 

因?yàn)榧^函數(shù)有名稱,所以調(diào)用堆棧提供了有關(guān)正在執(zhí)行的代碼的更多信息。

  • handleButtonClick函數(shù)名稱表示發(fā)生了單擊事件
  • gainCounter增加一個(gè)計(jì)數(shù)器變量。

2.盡可能使用內(nèi)聯(lián)方式

內(nèi)聯(lián)函數(shù)是僅具有一個(gè)表達(dá)式的函數(shù)。我喜歡箭頭功能,可以編寫短內(nèi)聯(lián)函數(shù)。

例如,不要使用箭頭函數(shù)的長形式:

 

  1. constarray=[1,2,3];array.map((number)=>{returnnumber*2;}); 

當(dāng)箭頭函數(shù)只有一個(gè)表達(dá)式時(shí),可以輕松地刪除大括號{}和return語句:

 

  1. constarray=[1,2,3];array.map(number=>number*2); 

第2個(gè)實(shí)踐:

當(dāng)函數(shù)只有一個(gè)表達(dá)式時(shí),一個(gè)好的做法是使用內(nèi)聯(lián)箭頭函數(shù)格式

3.胖箭頭和比較運(yùn)算符

比較操作符>、<、<=和>=看起來類似于f胖箭頭=>(它定義了箭頭函數(shù))。當(dāng)在內(nèi)聯(lián)箭頭函數(shù)中使用這些比較操作符時(shí),會產(chǎn)生一些混淆。

例如我們定義一個(gè)使用<=操作符的箭頭函數(shù)

 

  1. constnegativeToZero=number=>number<=0?0:number; 

同一行上的兩個(gè)符號=>和<=的存在會引起誤解。

為了清楚地將胖箭頭與比較操作符區(qū)分開,我們可以使用圓括號:

 

  1. constnegativeToZero=number=>(number<=0?0:number); 

第二個(gè)選項(xiàng)是使用更長的形式來定義箭頭函數(shù):

 

  1. constnegativeToZero=number=>{returnnumber<=0?0:number;}; 

這些重構(gòu)消除了胖箭頭符號和比較操作符之間的混淆。

第3個(gè)實(shí)踐:

如果箭頭函數(shù)包含操作符>、<、<=和>=,一個(gè)好的做法是將表達(dá)式包裝成一對括號,或者故意使用更長的箭頭函數(shù)形式。

4.構(gòu)造普通對象

在內(nèi)聯(lián)箭頭函數(shù)中使用對象字面量會觸發(fā)語法錯(cuò)誤:

 

  1. constarray=[1,2,3];//throwsSyntaxError!array.map(number=>{'number':number}); 

JS 認(rèn)為花括號是代碼塊,而不是對象文字。

將對象字面量加上一對括號即可解決此問題:

 

  1. constarray=[1,2,3];//Works!array.map(number=>({'number':number})); 

如果對象字面量有很多屬性,我們可以使用換行,同時(shí)仍然保持箭頭函數(shù)內(nèi)聯(lián)

 

  1. constarray=[1,2,3];//Works!array.map(number=>({'number':number'propA':'valueA','propB':'valueB'})); 

第4個(gè)實(shí)踐:

在內(nèi)聯(lián)箭頭函數(shù)中使用對象時(shí),把改對象包裝在一對括號中。

5.注意過多的嵌套

箭頭函數(shù)的語法很短,很好。但是,副作用是,當(dāng)許多箭頭函數(shù)嵌套時(shí),它可能是晦澀難懂。

我們考慮以下情況。單擊按鈕后,啟動(dòng)對服務(wù)器的請求,響應(yīng)準(zhǔn)備就緒后,將各項(xiàng)記錄到控制臺:

 

  1. myButton.addEventListener('click',()=>{fetch('/items.json').then(response=>response.json());.then(json=>{json.forEach(item=>{console.log(item.name);});});}); 

這里有三層箭頭函數(shù)的嵌套,需要花時(shí)間和精力來了解代碼的作用。

為了提高嵌套函數(shù)的可讀性,第一種方法是引入每個(gè)包含箭頭函數(shù)的變量,該變量應(yīng)簡明地描述函數(shù)的功能。

 

  1. constreadItemsJson=json=>{json.forEach(item=>console.log(item.name));};consthandleButtonClick=()=>{fetch('/items.json').then(response=>response.json());.then(readItemsJson);};myButton.addEventListener('click',handleButtonClick); 

重構(gòu)將箭頭函數(shù)提取到變量readItemsJson和handleButtonClick中。嵌套級別從3減少到2。現(xiàn)在,我們可以更輕松地了解腳本的功能。

更好的是,可以使用async/await語法重構(gòu)整個(gè)函數(shù),這是解決函數(shù)嵌套的一個(gè)很好的方法:

 

  1. consthandleButtonClick=async()=>{constresponse=awaitfetch('/items.json');constjson=awaitresponse.json();json.forEach(item=>console.log(item.name));};myButton.addEventListener('click',handleButtonClick); 

第5個(gè)實(shí)踐:

避免箭頭函數(shù)過多的嵌套,好的做法是通過將箭頭函數(shù)提取為獨(dú)立函數(shù),或者盡可能使用async/await語法。

6. 總結(jié)

JS中的箭頭函數(shù)是匿名的。為了使調(diào)試更高效,一個(gè)好的實(shí)踐是使用變量來保存箭頭函數(shù),這允許JS 推斷函數(shù)名。

當(dāng)函數(shù)主體具有一個(gè)表達(dá)式時(shí),嵌入式箭頭函數(shù)非常方便。

操作符>、<、<=和>=看起來類似于胖箭頭=>,在內(nèi)聯(lián)箭頭函數(shù)中使用這些操作符時(shí)必須小心。

對象字面量語法{prop:'value'}與代碼塊{}相似。因此,當(dāng)將對象字面量放置在嵌入式箭頭函數(shù)中時(shí),需要將其包裝在一對括號中:()=>({prop:'value'})。

最后,函數(shù)的過度嵌套模糊了代碼意圖。減少箭頭函數(shù)嵌套的一個(gè)好方法是將它們提取到變量中?;蛘?,嘗試使用更好的特性,如async/await語法。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-02-14 14:35:01

編程語言PythonJava

2021-01-04 08:04:51

JS 變量JavaScript

2023-07-06 14:51:30

開發(fā)高質(zhì)量軟件

2011-03-04 10:11:09

JavascriptAPI

2012-09-13 10:44:18

Python代碼

2020-03-12 14:03:59

工具代碼開發(fā)

2015-08-25 08:29:11

編寫高質(zhì)量命名

2011-12-29 15:02:27

JavaScript

2024-03-07 11:39:24

HadolintDockerfile工具

2015-08-25 08:42:36

高質(zhì)量代碼命名

2017-07-14 09:54:47

代碼函數(shù)程序

2015-07-13 10:48:44

OC代碼程序員

2011-04-07 09:18:59

MySQL語法

2023-10-31 16:22:31

代碼質(zhì)量軟件開發(fā)Java

2020-04-02 15:45:24

JavaScript開發(fā) 模塊

2020-03-02 09:26:16

JavaScript程序員JSON

2010-03-01 14:31:04

Java

2023-03-09 15:05:46

HTMLWeb 開發(fā)SEO

2021-08-08 14:26:24

SQL數(shù)據(jù)庫開發(fā)

2011-04-01 09:13:19

VB程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 三级在线免费 | 一级黄色夫妻生活 | 亚洲一区中文字幕 | 一区二区三区四区在线视频 | 美女视频三区 | 精品国模一区二区三区欧美 | 久艹网站 | 999国产视频 | 夜夜爽99久久国产综合精品女不卡 | 日本精品一区二区三区视频 | 久久这里只有精品首页 | 国产福利在线播放麻豆 | 成人亚洲 | 国产二区三区 | 国产精品一区在线观看 | www.欧美视频 | 中文字幕一区二区三区四区五区 | 欧美 日韩 在线播放 | 黄色成人在线观看 | 男女羞羞视频在线观看 | 免费 视频 1级 | 亚洲免费一区 | 欧美精品91 | 亚洲色图网址 | 91视频在线 | 特一级毛片 | 久久久久国产 | 成人精品一区亚洲午夜久久久 | 精品国产不卡一区二区三区 | 乳色吐息在线观看 | 欧洲尺码日本国产精品 | 国产精品区二区三区日本 | 亚洲一区二区三区在线免费观看 | 久久精品一级 | 国产偷录视频叫床高潮对白 | 久久久精品黄色 | 男人天堂网站 | 欧美日韩久久久久 | 青娱乐国产 | 青娱乐av| 欧美精品久久 |