日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript位置參數實現原理及過程解析

瀏覽:132日期:2023-10-14 08:43:12

1.什么是位置參數?

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

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

function greet(firstName, lastName) { console.log(`Hello ${firstName} ${lastName}`); } // 預期用法 greet(’Michael’, ’Scott’); const fName = ’Harry’; const lName = ’Potter’; greet(fName, lName); // 錯誤用法 const firstName = ’Erlich’; const lastName = ’Bachman’; greet(lastName, firstName);

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

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

2. 位置參數問題

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

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

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

greet(’Aditya’, null, ’Agarwal’); // Correct greet(’Aditya’, ’Agarwal’); // Incorrect

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

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

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

(3) 引起細微的錯誤

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

const numbers = [’1’, ’4’, ’8’, ’10’]; console.log(numbers.map(parseInt));

// 你可能會認為結果將是: [1, 4, 8, 10]

// 這是實際的輸出: [ 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。這些是發生的實際函數調用:

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

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

3. 位置參數的替代

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

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

// 實現 function myCustomParseInt(objArgs) { return parseInt(objArgs.item, objArgs.radix); } // 使用 const num = myCustomParseInt({ item: ’100’, radix: 10 });

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

const numbers = [’1’, ’4’, ’8’, ’10’];

const result = numbers.map((item, index) => myCustomParseInt({ item, index }));

console.log(result); // [ 1, 4, 8, 10 ]

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

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

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

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

// 位置參數 function myCustomParseInt(item, radix) { return parseInt(item, radix); } // 命名參數舊的實現 function myCustomParseInt(objArgs) { return parseInt(objArgs.item, objArgs.radix); } // 命名參數解構 function myCustomParseInt({ item, radix }) { return parseInt(item, radix); }

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

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

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

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

// 對于位置參數,我們必須在之間添加一個null function greetPos(firstName, middleName, lastName) {} greetPos(’Aditya’, null, ’Agarwal’);

// 使用命名參數,你只需提供firstName和lastName。 function greetNamed({ firstName, middleName, lastName } = {}) {} greetNamed({ firstName: ’Aditya’, lastName ’Agarwal’ });

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

// 以url作為位置參數的請求,以及以args做命名參數的選項。 fetch(’https://google.com’, { method: ’POST’, headers: { ’Content-Type’: ’application/json’, }, }); // basic GET requests with just positional args fetch(’https://google.com’);

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产精品久久久久久亚洲| 久久精品72免费观看| 香蕉久久99| 亚洲综合日韩| 日本91福利区| 成人午夜网址| 午夜日韩福利| 91精品美女| 精品视频在线你懂得| 欧美日韩在线二区| 日韩精品免费视频一区二区三区| 欧美精品导航| 欧美日韩视频| 国产精品一区三区在线观看| 国产网站在线| 日韩在线卡一卡二| 麻豆91在线播放| 自拍日韩欧美| 国产精品高清一区二区| 欧美丝袜一区| 日韩欧美在线精品| av中文字幕在线观看第一页| 亚洲欧美久久久| 国产美女视频一区二区| 99精品网站| 国产日韩免费| 日韩中文字幕| 久久亚洲精品中文字幕| 欧美少妇精品| 亚洲一区观看| 国产伦精品一区二区三区千人斩| 91亚洲国产成人久久精品| 免费黄色成人| 日韩在线成人| 免费观看亚洲天堂| 日本精品在线中文字幕| 免费视频久久| 国产精品亚洲综合久久| 国产在线一区不卡| 成人av二区| 久久狠狠久久| 91精品久久久久久久久久不卡| 免费成人av在线播放| 一本大道色婷婷在线| 日韩和欧美一区二区三区| 亚洲二区视频| 麻豆国产精品777777在线| 久久不射中文字幕| 日韩av福利| 国产精品男女| 亚洲综合专区| 欧美手机在线| 中文在线а√天堂| 日韩av网站在线观看| 91九色精品| 国产精品久久观看| 国产精品亲子伦av一区二区三区 | 在线精品福利| 91精品精品| 国产91在线播放精品| 欧美日本三区| 亚洲精选久久| 先锋亚洲精品| 亚洲福利久久| 高清不卡亚洲| 精品久久免费| 欧美日韩午夜电影网| 日韩中文字幕一区二区三区| 日韩av首页| 国产自产自拍视频在线观看| 国产精品一区二区中文字幕| 蜜桃av一区二区在线观看| 婷婷亚洲综合| 日韩精品免费一区二区在线观看| 国精品产品一区| 久久免费精品| 欧美黑人做爰爽爽爽| 国产日韩免费| 日韩黄色av| 亚洲精品系列| 亚洲1区在线| 首页国产欧美久久| 国产精品三上| 国产亚洲在线观看| 亚洲女人av| 蜜臀va亚洲va欧美va天堂 | 婷婷成人综合| 亚洲五月婷婷| 久久中文字幕av| 天堂资源在线亚洲| 欧美亚洲国产激情| 欧美日韩在线播放视频| 久久久人人人| 日韩一区三区| 亚洲深夜视频| 四虎4545www国产精品| а√天堂8资源中文在线| 福利在线一区| 免费高潮视频95在线观看网站| 成人av三级| 精品丝袜在线| 久久五月天小说| 亚洲精品一区二区在线看| 一级欧洲+日本+国产| 国产亚洲激情| 亚洲不卡视频| 国产精品亚洲成在人线| 麻豆成人91精品二区三区| 精品午夜av| 红杏一区二区三区| 欧美freesex黑人又粗又大| 国产91一区| 水野朝阳av一区二区三区| 亚洲另类视频| 国产免费久久| 天堂а√在线最新版中文在线| 久久免费黄色| 日韩视频久久| 日韩毛片一区| 精品三级在线| 999国产精品视频| 午夜在线播放视频欧美| 亚洲精品亚洲人成在线观看| 69精品国产久热在线观看| 国产精品一区二区美女视频免费看 | 99在线观看免费视频精品观看| 久久都是精品| 国产探花在线精品| 高清日韩中文字幕| 欧美性感美女一区二区 | 中文字幕一区二区精品区| 日韩va欧美va亚洲va久久| 里番精品3d一二三区| 久久久9色精品国产一区二区三区| 亚洲一区欧美激情| 国产精品黄色片| 国产亚洲一区二区手机在线观看 | 99久久久久国产精品| 中文在线一区| 亚洲精品看片| 久久精品日韩欧美| 日韩欧美网址| 午夜久久影院| 亚洲aa在线| 国产日韩亚洲| 亚洲免费网址| 亚洲欧美视频| 嫩草伊人久久精品少妇av杨幂| 国产夫妻在线| 午夜在线精品| 久久99青青| 九九久久电影| 欧美日韩一区二区国产| 精品国产不卡一区二区| 亚洲网站视频| 夜夜精品视频| 亚洲青青久久| 国产高清日韩| 久久国产欧美| 亚洲久久视频| 丝袜美腿高跟呻吟高潮一区| 五月天综合网站| 国产精品久久久久久模特| 激情六月综合| 精品视频自拍| 午夜天堂精品久久久久| 亚洲电影有码| 国产精品一区毛片| 欧美在线亚洲| 亚洲毛片在线| 免费看av不卡| 在线精品视频一区| 成人国产精品久久| 热久久久久久久| 精品成av人一区二区三区| 亚洲精品123区| 久久99蜜桃| 99国产精品自拍| 欧美黑人巨大videos精品| 亚洲高清av| 国产精品免费精品自在线观看| 99久久亚洲精品| 国产欧美另类| 日韩1区2区3区| 欧美激情在线精品一区二区三区| 野花国产精品入口| 91看片一区| 久久精品天堂| 日韩精品高清不卡| 久久福利影视| 欧美日韩中文一区二区| 精品国产乱码久久久| 欧美亚洲二区| 亚洲视频二区| 黄色成人精品网站| 久久精品国语| 亚洲欧洲美洲av| 你懂的国产精品永久在线| 日韩三级视频| 性欧美69xoxoxoxo|