精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript:為什么命名參數比位置參數更好

開發 前端
通常,在你傳遞一個或兩個參數的情況下,這很好,因為它很難弄亂參數的順序。但是如果你必須調用一個需要6個參數的函數,那就很難記住傳遞參數的順序。

1. 什么是位置參數?

[[338903]]

你一定很熟悉位置參數,即使你第一次聽到這個名字。

  1. function greet(firstName, lastName) { 
  2.   console.log(`Hello ${firstName} ${lastName}`); 
  3.  
  4. // 預期用法 
  5.  
  6. greet('Michael', 'Scott'); 
  7.  
  8. const fName = 'Harry'
  9. const lName = 'Potter'
  10. greet(fName, lName); 
  11.  
  12.  
  13. // 錯誤用法 
  14.  
  15. const firstName = 'Erlich'
  16. const lastName = 'Bachman'
  17. greet(lastName, firstName); 

greet函數接受兩個參數:firstName和lastName。調用者必須確保firstName是第一個參數,lastName是第二個參數。這里重要的一點是,參數的名稱沒有任何意義,唯一重要的是參數傳遞的順序。

這種熟悉的方法稱為位置參數。通常,在你傳遞一個或兩個參數的情況下,這很好,因為它很難弄亂參數的順序。但是如果你必須調用一個需要6個參數的函數,那就很難記住傳遞參數的順序。你不希望傳遞密碼來代替用戶名參數。

2. 位置參數問題

位置參數很簡單,但是你將面臨一些挑戰。

(1) 不能跳過中間參數 /

假設你已經更改了greet函數,使其現在需要3個參數:firstName、middleName和lastName。由于許多人沒有中間名,因此你希望將MiddleName設為可選參數,僅使用firstName和lastName調用greet函數的唯一方法是此方法。

  1. greet('Aditya', null, 'Agarwal'); 
  2. // Correct ✅ 
  3.  
  4. greet('Aditya', 'Agarwal'); 
  5. // Incorrect ❌ 

你不能只提供firstName和lastName。當可選參數的數量增加到5個時,這個問題變得更加明顯。現在,你必須提供5個null才能在這些參數之后提供參數。

(2) 將類型添加到位置參數不那么干凈

如今,為你的實用程序添加類型變得非常普遍。使用位置參數,你別無選擇,只能將類型與函數定義一起內聯。這可能會使代碼有點模糊,如果我們可以在一個塊中聲明所有參數的類型定義,那就更好了。

(3) 引起細微的錯誤

位置參數包裝了很多隱性行為,這可能是造成微妙bug的原因。我們來看一個常見的JS技巧問題

  1. const numbers = ['1', '4', '8', '10']; 
  2. console.log(numbers.map(parseInt)); 
  3.  
  4. // 你可能會認為結果將是: 
  5. [1, 4, 8, 10] 
  6.  
  7. // 這是實際的輸出: 
  8. [ 1, NaN, NaN, 3 ] 

驚訝嗎?這種奇怪的輸出的原因隱藏在位置參數的隱性背后。你會看到map和parseInt函數在顯而易見的情況下隱藏了它們的一些秘密。

讓我們再次查看代碼 number.map(parseInt)。

這里到底發生了什么?

  • 我們在numbers數組上運行map函數。
  • map獲取數組的第一項并將其傳遞給parseInt。
  • 現在,對于數組中的第一項(即1),它將執行 parseInt(1)。對...?錯誤!!!

實際上,map將三個參數傳遞給其回調函數。第一個是數組中的當前項目,第二個是項目的索引,第三個是整個數組。這本身沒有問題,但真正的問題在于后一部分。

numbers.map(parseInt) 與 numbers.map((item) => parseInt(item)) 不同。你可以假設,由于回調函數僅接受item參數并將其傳遞給parseInt,因此我們可以跳過附加步驟。但是兩者是不同的:在前者中,我們將所有數據從map傳遞到parseInt,而在后者中,我們僅傳遞項。

你可能不知道,但是parseInt的第二個參數稱為基數。默認情況下,基數的值為10(以10為底,因為人類遵循十進制進行計數)。該代碼出了問題,就是我們將當前項目的索引作為基數值傳遞給parseInt。這些是發生的實際函數調用:

  1. parseInt('1', 0, [...]); 
  2. parseInt('4', 1, [...]); 
  3. parseInt('8', 2, [...]); 
  4. parseInt('10', 3, [...]); 

現在我們知道了問題,我們如何才能做得更好?

3. 位置參數的替代

如果一個函數可以通過名字就知道它期望的參數是什么呢?這樣即使你誤傳了額外的數據給它,它也只會使用它需要的東西。

讓我們對parseInt進行包裝。下面是一個簡單的實現。

  1. // 實現 
  2. function myCustomParseInt(objArgs) { 
  3.   return parseInt(objArgs.item, objArgs.radix); 
  4.  
  5. // 使用 
  6. const num = myCustomParseInt({ item: '100', radix: 10 }); 

myCustomParseInt僅接受一個參數,它是一個對象。這個對象可以有兩個鍵:item 和 radix。讓我們使用我們的自定義函數與map。必須有一個中間步驟,將回調收到的args發送到myCustomParseInt。

  1. const numbers = ['1', '4', '8', '10']; 
  2.  
  3. const result = numbers.map((item, index) => myCustomParseInt({ item, index })); 
  4.  
  5. console.log(result); // [ 1, 4, 8, 10 ] 

請注意,即使我們將索引傳遞給myCustomParseInt也不會造成任何問題。那是因為myCustomParseInt只會忽略它。將對象傳遞給函數的這種模式稱為命名參數,它比位置參數更明確。

要更改基數,我們必須顯式傳遞基數鍵。這意味著如果要解析以2為底的字符串,則必須轉到文檔并查看參數(基數)的確切名稱。如果我們盲目地傳遞任何其他鍵,它將無濟于事。這對我們來說很棒,因為它避免了意外行為。

(1) 具有解構的命名參數

不久前,JavaScript獲得了稱為解構的功能,讓我們在myCustomParseInt實現中使用它。

  1. // 位置參數 
  2. function myCustomParseInt(item, radix) { 
  3.   return parseInt(item, radix); 
  4.  
  5. // 命名參數舊的實現 
  6. function myCustomParseInt(objArgs) { 
  7.   return parseInt(objArgs.item, objArgs.radix); 
  8.  
  9. // 命名參數解構 
  10. function myCustomParseInt({ item, radix }) { 
  11.   return parseInt(item, radix); 

你會注意到,只需添加兩個花括號,我們就可以得到命名args的好處,你可以將解構視為執行 const item = objArgs.item;。

如果使用 undefined 調用myCustomParseInt,則JS將引發錯誤。那是因為不允許 undefined.item。為了避免這種情況,我們可以在解構結束時添加 = {}。這樣,當我們傳遞undefined時,它將執行 {}.item 這是有效的JS。這是最終的實現:

  1. function myCustomParseInt({ item, radix } = {}) { 
  2.   return parseInt(item, radix); 

通過命名參數模式,我們也可以跳過我們不想提供的參數,因為函數不再依賴于傳遞參數的順序。

  1. // 對于位置參數,我們必須在之間添加一個null 
  2. function greetPos(firstName, middleName, lastName) {} 
  3. greetPos('Aditya', null, 'Agarwal'); 
  4.  
  5.  
  6. // 使用命名參數,你只需提供firstName和lastName。 
  7. function greetNamed({ firstName, middleName, lastName } = {}) {} 
  8. greetNamed({ firstName: 'Aditya', lastName 'Agarwal' }); 

總而言之,我要說的是命名參數是一種強大的模式,如今它已變得非常普遍,但是你不必總是使用它們。有時你甚至可以將兩者結合在一起。瀏覽器中的fetch API的用法如下:

  1. // 以url作為位置參數的請求,以及以args做命名參數的選項。 
  2. fetch('https://google.com', { 
  3.   method: 'POST', 
  4.   headers: { 
  5.     'Content-Type': 'application/json', 
  6.   }, 
  7. }); 
  8.  
  9. // basic GET requests with just positional args 
  10. fetch('https://google.com'); 

這里的強制參數(API路徑)是一個位置參數,然后通過命名參數接受可選的參數。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-11-10 15:32:29

2014-03-26 10:09:14

指針指針使用

2012-05-11 09:50:49

iOSAndroid移動應用

2020-07-17 19:31:19

PythonR編程

2020-02-14 13:53:33

Python 開發編程語言

2023-02-26 23:36:08

PHPGo函數

2023-09-27 08:22:28

Windows系統管理器

2022-09-05 10:01:19

VueReact

2024-08-13 17:29:24

2022-03-28 11:51:00

深度學習機器學習模型

2021-01-25 07:14:53

Cloud DevOps云計算

2021-08-31 23:33:50

AndroidiOS功能

2013-01-15 10:53:36

2013-01-16 14:29:22

2010-01-20 17:32:16

C++函數

2009-06-09 21:54:26

傳遞參數JavaScript

2021-01-13 10:51:08

PromissetTimeout(函數

2021-05-27 07:54:21

Math.max()-Infinity參數

2017-09-20 07:57:38

AWG電纜導線

2018-05-30 14:49:51

編程語言API語法
點贊
收藏

51CTO技術棧公眾號

97aⅴ精品视频一二三区| 午夜久久tv| 欧美日韩专区在线| 国产免费内射又粗又爽密桃视频| 色香蕉在线视频| 99国产精品私拍| xxxxxxxxx欧美| 国产麻豆xxxvideo实拍| 久久青草免费| 天天免费综合色| www.午夜色| 日韩av成人| 国产一区二区美女| 国产成人综合精品| 国产极品在线播放| 香蕉久久网站| 在线电影中文日韩| 91av在线免费| 一区二区网站| 欧美日韩精品综合在线| 欧美日韩一道本| 污污视频在线| 中文字幕一区二区三区视频| 国产一区二区精品在线| 国产视频手机在线| 另类人妖一区二区av| 国产91av在线| 国产精彩视频在线| 中文字幕一区二区三区乱码图片| 最近2019年好看中文字幕视频| 99精品一区二区三区无码吞精| va天堂va亚洲va影视| 欧美日韩你懂得| 日韩 欧美 高清| 九色porny丨国产首页在线| 亚洲人成亚洲人成在线观看图片| 日本成人三级| 日本不卡免费播放| 99re在线精品| 国产区一区二区三区| 亚洲春色一区二区三区| 国产一区二区三区黄视频 | 久久夜色精品国产噜噜亚洲av| 国产精品www.| 欧美高清视频在线播放| 久草视频免费在线播放| 欧美国产三区| 欧美激情日韩图片| 日本免费一二三区| 亚洲国产专区校园欧美| 91精品国产乱码久久久久久久久 | 国产真人真事毛片视频| 精品视频99| 中文字幕日韩在线观看| 日日碰狠狠添天天爽| 日韩伦理一区| 免费91麻豆精品国产自产在线观看| 日本黄区免费视频观看| 日韩综合在线| 日日噜噜噜夜夜爽亚洲精品 | 天天综合在线视频| 9色porny自拍视频一区二区| 狠狠爱一区二区三区| 婷婷五月综合激情| 久久久久国产精品厨房| 手机成人在线| 国产一二区在线| 一区二区三区在线高清| 99在线免费视频观看| 欧美男人天堂| 欧美日韩一二三四五区| 少妇人妻互换不带套| 欧美黑粗硬大| 日韩免费电影一区| theav精尽人亡av| 日韩精品一区二区三区免费观看| 久久久国产一区| 国产第一页在线播放| 老鸭窝亚洲一区二区三区| 国产精品日日摸夜夜添夜夜av| 国产情侣自拍小视频| 成人av电影在线| 日本一区二区视频| 婷婷色在线资源| 欧美性猛交xxxx免费看久久久| 天天干天天综合| 亚洲精品视频一二三区| 亚洲美女性生活视频| 免费三级在线观看| 一道本一区二区| 91美女片黄在线观| 无码精品人妻一区二区| 综合电影一区二区三区| 无码人妻丰满熟妇区96| 四虎成人精品一区二区免费网站| 精品久久久久99| 日本污视频网站| 激情久久久久久| 国产免费一区二区三区在线能观看| 亚洲国产一二三区| 国产精品色眯眯| 99在线免费视频观看| 亚洲精品伊人| 日韩精品一区二区三区第95| 亚洲AV成人无码精电影在线| 美女航空一级毛片在线播放| 亚洲国产精品一区二区www在线| 一本色道无码道dvd在线观看| 精品一区二区三区中文字幕| 亚洲视频在线看| 国产大片中文字幕| 国产一区日韩二区欧美三区| 蜜桃视频在线观看成人| 美女精品导航| 日韩一级片网址| 手机毛片在线观看| 国产精品一页| 国产精品国产亚洲精品看不卡15| 色综合久久影院| 色综合久久88色综合天天免费| 亚洲少妇一区二区| 国产高清一区| 麻豆久久久久久| 亚洲一区二区三区香蕉| 国产高清视频在线观看| 欧美日韩激情视频| 熟妇高潮一区二区| 在线国产一区二区| 国产欧美日韩精品丝袜高跟鞋| 艳母动漫在线看| 亚洲国产一区二区视频| 伊人av在线播放| 手机在线电影一区| 国产欧美一区二区白浆黑人| aaa在线观看| 91久久精品一区二区三区| 久久人人爽人人爽人人片 | 91丨九色丨国产丨porny| 日韩亚洲欧美一区二区| 大胆国模一区二区三区| 日韩最新中文字幕电影免费看| www.av88| 亚洲国产精品av| 欧美精品性生活| 精品久久视频| 国产精品网站大全| 免费网站免费进入在线| 欧美福利视频导航| 99久久99久久精品国产| 国产一区二区三区黄视频 | 精品国产一区二区三区四区vr| 任你弄在线视频免费观看| 日韩精品一区在线| 久久精品视频8| 波多野结衣中文字幕一区| 国产综合中文字幕| 亚洲最大在线| 国产精品久久久久久一区二区 | 性做久久久久久免费观看欧美| 日本一区二区免费视频| 亚洲精品日本| 欧洲高清一区二区| 四虎影视国产精品| 欧美另类暴力丝袜| 少妇又色又爽又黄的视频| 精品日本美女福利在线观看| 国产手机在线观看| 精品一区免费av| 国内少妇毛片视频| 亚洲人成亚洲精品| 成人a级免费视频| 欧美大胆的人体xxxx| 日韩高清av一区二区三区| 欧美黄色一级大片| 亚洲同性同志一二三专区| 俄罗斯黄色录像| 蜜桃视频一区| 手机成人av在线| 国产精品一线| 国产精品综合网站| hd国产人妖ts另类视频| 亚洲色图五月天| va婷婷在线免费观看| 天天亚洲美女在线视频| 国产免费嫩草影院| 波多野结衣中文字幕一区二区三区 | av资源站久久亚洲| 国产精品迅雷| 欧美日韩福利在线观看| 青草久久伊人| 3d动漫精品啪啪一区二区竹菊| 伊人365影院| 国产日产欧美一区二区视频| 亚洲精品成人无码毛片| 日韩电影一二三区| 人人妻人人澡人人爽欧美一区双 | 日韩 欧美 综合| 国产精品私房写真福利视频| 亚州av综合色区无码一区| 精品一区二区影视| 激情五月开心婷婷| 国自产拍偷拍福利精品免费一 | 国产精品一二| 国产成人生活片| 国产欧美一区| 国精产品99永久一区一区| 9999精品| 国产福利精品av综合导导航| 嗯~啊~轻一点视频日本在线观看| 中文字幕久热精品在线视频| 四虎在线视频| 精品少妇一区二区三区在线播放| 中文字幕人妻一区二区三区视频 | 午夜宅男在线视频| 国产精品人人爽人人做我的可爱| 精品一区二区三区毛片| 成人在线国产| 欧美人xxxxx| 日本亚洲不卡| 成人女人免费毛片| 精品欧美视频| 成人福利在线视频| 素人啪啪色综合| 国产99久久久欧美黑人| 白浆在线视频| 性欧美xxxx视频在线观看| 污片在线免费观看| 欧美美女18p| 成人日日夜夜| 久久天天躁狠狠躁夜夜av| 天堂中文8资源在线8| 中文字幕亚洲一区二区三区五十路| 日韩a级作爱片一二三区免费观看| 亚洲成成品网站| 丰满人妻熟女aⅴ一区| 欧美一级理论片| 国产美女免费看| 欧美一级高清大全免费观看| 国产欧美日韩成人| 日韩手机在线导航| av综合在线观看| 日韩欧美的一区| 亚洲高清视频网站| 欧美大肚乱孕交hd孕妇| 午夜精品久久久久久久96蜜桃| 91精品免费在线观看| 99久久久久久久| 日韩精品自拍偷拍| 日本激情视频网站| 亚洲精品理论电影| 免费人成在线观看网站| 亚洲色图激情小说| 1pondo在线播放免费| 久久久国产一区二区| 肉肉视频在线观看| 久久全国免费视频| 在线观看欧美日韩电影| 国产精品激情自拍| 久久天堂影院| 91亚洲人电影| 国产伦理久久久久久妇女| 精品久久久久久中文字幕动漫| 日日狠狠久久偷偷综合色| 欧美精品国产精品久久久| 精品国产欧美日韩| 欧美亚洲视频一区| 在线成人黄色| 国产福利视频在线播放| 青椒成人免费视频| 久久精品无码一区二区三区毛片| 国产成人精品一区二| 在线观看国产网站| 国产嫩草影院久久久久| 日本中文字幕免费在线观看| 亚洲国产精品一区二区尤物区| 免费看日批视频| 欧美人xxxx| 欧美一区二不卡视频| 亚洲三级 欧美三级| 国产黄色在线观看| 992tv在线成人免费观看| 国产精品.xx视频.xxtv| 国产伦精品一区| 日韩影院二区| 18禁网站免费无遮挡无码中文 | 国产精品福利观看| 久久一级大片| 蜜桃导航-精品导航| 天天综合一区| 欧洲av无码放荡人妇网站| 国产一区二区三区综合| 中文字幕丰满孑伦无码专区| 中文字幕在线一区免费| 中日韩精品视频在线观看| 欧美日韩国产综合一区二区| 天堂在线观看av| 久久精品91久久香蕉加勒比| 国产精品yjizz视频网| 国产日韩一区在线| 亚洲免费专区| 日韩精品一区二区三区四| 日本不卡在线视频| 国产人妻黑人一区二区三区| 亚洲欧洲日本在线| 无码一区二区三区| 日韩不卡在线观看| 国产精品刘玥久久一区| 国产精品久久久久久久久久东京 | 秋霞影院一区| 神马影院一区二区| 国产精品毛片在线看| 国产又粗又猛又爽又黄| 国产精品女同互慰在线看| 久久久久久久久久久影院| 欧美va亚洲va| 国产黄大片在线观看画质优化| 国产成一区二区| 亚洲永久精品唐人导航网址| 欧美高清中文字幕| 国产一区二区三区蝌蚪| 亚洲女人久久久| 91激情在线视频| 久久久资源网| 青青精品视频播放| 欧美电影在线观看免费| 免费高清一区二区三区| 国产一区啦啦啦在线观看| 亚洲女人毛茸茸高潮| 欧美探花视频资源| 成人性爱视频在线观看| 国产a级全部精品| 综合综合综合综合综合网| www.中文字幕在线| 91丨九色porny丨蝌蚪| 自拍偷拍欧美亚洲| 亚洲精品国产精品久久清纯直播| 日本在线视频网址| 成人欧美视频在线| 亚洲大胆av| 男人的天堂影院| 午夜av电影一区| 日韩电影网址| 国产成人鲁鲁免费视频a| 免费成人av| 亚欧在线免费观看| 欧美韩国日本一区| 中文字幕激情视频| 久久久国产一区| 日本免费一区二区三区视频| 国产一区二区三区播放| 丰满亚洲少妇av| 日本一级黄色大片| 亚洲品质视频自拍网| 欧美三级精品| 一本久道久久综合| 国产乱码精品一区二区三区忘忧草 | 亚洲一区在线不卡| 国产精品久久久久久久第一福利| 亚洲一区精品在线观看| 久久夜色精品国产亚洲aⅴ| 日韩视频一二区| 少妇av一区二区三区无码| 91色porny| 在线播放一级片| 九九热这里只有精品免费看| 国产精品chinese在线观看| 青青草原成人网| 欧美极品aⅴ影院| 国产日韩免费视频| 国产91av在线| 欧美gayvideo| 免费看黄色片的网站| 一本一道久久a久久精品综合蜜臀| av在线电影院| 444亚洲人体| 国产色综合网| 久草手机视频在线观看| 精品剧情在线观看| 国产精品专区免费| 亚洲色图都市激情| 99精品视频在线观看免费| 中文字幕av在线免费观看| 欧美成人全部免费| 国产精品片aa在线观看| 久久精品国产露脸对白| 五月天久久比比资源色| 香蕉视频在线看| 精品国产一区二区三区麻豆小说| 久久精品国产亚洲一区二区三区| 美女视频黄免费| 中文字幕av一区二区| 大型av综合网站| 欧美大片久久久| 天天亚洲美女在线视频| 国产在线更新| 色视频一区二区三区| 成人午夜激情在线| 在线观看视频中文字幕| 51久久精品夜色国产麻豆| 亚洲精品成人无限看|