成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JavaScript代碼中的函數(shù)參數(shù)和副作用是什么

這篇文章給大家介紹JavaScript代碼之函數(shù)參數(shù)和副作用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)專注于頭屯河網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供頭屯河營銷型網(wǎng)站建設(shè),頭屯河網(wǎng)站制作、頭屯河網(wǎng)頁設(shè)計(jì)、頭屯河網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造頭屯河網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供頭屯河網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

函數(shù)是JavaScript程序的重要組成部分,用于將代碼分成可重用的塊。因此,為了擁有整潔的JavaScript代碼,我們需要具有易于理解的函數(shù)。

本文將介紹優(yōu)質(zhì)函數(shù)的更多屬性,包括標(biāo)志參數(shù),二元和三元函數(shù)以及副作用。

JavaScript代碼中的函數(shù)參數(shù)和副作用是什么

標(biāo)志參數(shù)

布爾參數(shù)應(yīng)謹(jǐn)慎使用。它使函數(shù)簽名更加復(fù)雜,并告訴我們函數(shù)不僅做一件事(具有多個(gè)路徑)。

二元函數(shù)

二元函數(shù)比采用較少參數(shù)的函數(shù)更難理解。但有些時(shí)候使用二元函數(shù)是有道理的。例如,如果有一個(gè)保存笛卡爾坐標(biāo)的對象,那么它應(yīng)該有2個(gè)參數(shù)。

例如,可以創(chuàng)建一個(gè)帶有構(gòu)造函數(shù)的類,該構(gòu)造函數(shù)有2個(gè)參數(shù),如下所示:

class Point {   constructor(x, y) {     this.x = x;     this.y = y;   } }const point = new Point(1, 2);

用其他方式定義它幾乎是不可能的。

但是,我們必須要意識到,與使用較少參數(shù)的函數(shù)相比,二元函數(shù)需要更多的時(shí)間和精力。

三元函數(shù)

具有3個(gè)參數(shù)的函數(shù)要花費(fèi)大量時(shí)間和精力才能理解具有2個(gè)參數(shù)的函數(shù)。

如果存在2個(gè)或更少的參數(shù),則有更多的參數(shù)組合可供考慮。

將參數(shù)合并為對象

如果一個(gè)函數(shù)含有多個(gè)參數(shù),應(yīng)該考慮將它們合并為對象。

如果參數(shù)之間有關(guān)聯(lián),則更應(yīng)該這樣做。例如,以下函數(shù)含有許多參數(shù):

const describeFruit = (color,name, size, price, numSeeds, type) => {     return `${fruitName} is ${fruitColor}.It's ${fruitSize}. It costs ${price}. It has ${numSeeds}. The type if ${type}`; }

6個(gè)參數(shù)可能太多,可以通過傳入一個(gè)對象來清理它:

const describeFruit = (fruit)=> {   return `${fruit.name} is${fruit.color}. It's ${fruit.size}. It costs ${fruit.price}. It has${fruit.numSeeds}. The type if ${fruit.type}`; }

如我們所見,它更加整潔,且無需擔(dān)心大量參數(shù)的傳遞。

由于函數(shù)較為短小,因此也更適合屏幕顯示。

5個(gè)參數(shù)可能是一個(gè)函數(shù)應(yīng)該包含的最大值。

JavaScript代碼中的函數(shù)參數(shù)和副作用是什么

動詞和關(guān)鍵詞

將動詞和關(guān)鍵字包含在函數(shù)名稱中不失為一個(gè)好主意,因?yàn)樗鼈儠?zhí)行某些操作,這意味著名稱中的動詞是合理的。

另外,我們需要知道執(zhí)行操作的對象。這意味著必須添加一些關(guān)鍵字才能做到這一點(diǎn)。

例如,符合這一點(diǎn)的優(yōu)質(zhì)函數(shù)定義類似于:

const copyArray = (array) =>[...array];

copyArray 名稱讓我們知道函數(shù)復(fù)制了一個(gè)數(shù)組。

它還讓我們知道要傳遞給函數(shù)的內(nèi)容,這顯然是一個(gè)數(shù)組。

無副作用

副作用是函數(shù)中的代碼會對函數(shù)外部的內(nèi)容進(jìn)行更改。

這是很糟糕的,因?yàn)樗鼤瘮?shù)之外的內(nèi)容進(jìn)行隱藏更改。

我們應(yīng)該盡可能避免這種情況,因?yàn)檫@會造成一些出乎意料的事情,并且要花更多的時(shí)間進(jìn)行測試,因?yàn)槌私邮軈?shù),執(zhí)行操作并返回結(jié)果外,它還對必須考慮的函數(shù)之外的內(nèi)容進(jìn)行了更改。

這意味著我們必須測試函數(shù)返回結(jié)果之外的內(nèi)容。

例如,如果有:

let numFruits = 1;  const addFruit = () => {    numFruits++;  }const removeFruit = () => {    numFruits--;  }

那么我們有2個(gè)具有副作用的函數(shù),因?yàn)樗鼈兌几牧烁髯院瘮?shù)外部的 numFruits變量。

編寫這些函數(shù)的更好方法是將它們編寫為純函數(shù)。純函數(shù)是在傳入相同參數(shù)的情況下返回相同內(nèi)容的函數(shù)。而且,它沒有副作用。

因此,純函數(shù)更易于測試,并且它們的行為也是可以預(yù)測的。

重寫上面的代碼,如下所示:

let numFruits = 1; const addFruit = (numberOfFruits) => numberOfFruits + 1; const removeFruit = (numberOfFruits) => numberOfFruits - 1;numFruits = addFruit(numFruits); numFruits = removeFruit(numFruits);

現(xiàn)在,有2個(gè)函數(shù)來接收numFruits 參數(shù),并分別返回一個(gè)更大或更小的數(shù)字。

然后可以使用它們來更改函數(shù)外部的numFruits變量。

如我們所見,它們對 numFruits 不執(zhí)行任何操作,而是分別返回numberOfFruits參數(shù)加1或減1。

如果為它們編寫測試,則可以通過傳入輸入和檢查輸出是否是我們想要的內(nèi)容來輕松測試它們。這比將副作用賦予可能適用于測試代碼的變量要好得多。

JavaScript代碼中的函數(shù)參數(shù)和副作用是什么

標(biāo)志參數(shù)應(yīng)最小化。他們告訴我們,該函數(shù)不僅完成一件事情,而且是函數(shù)簽名中的另一個(gè)參數(shù)。

使用較少參數(shù)的函數(shù)要優(yōu)于使用較多參數(shù)的函數(shù)。如果需要很多參數(shù),請考慮將它們合并成一個(gè)對象。

最后,若條件允許,應(yīng)盡量避免副作用。具有副作用的函數(shù)會執(zhí)行隱藏操作,并且很難對它進(jìn)行測試。純函數(shù)不會產(chǎn)生副作用,因此更具可測試性和可預(yù)測性。

關(guān)于JavaScript代碼之函數(shù)參數(shù)和副作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章標(biāo)題:JavaScript代碼中的函數(shù)參數(shù)和副作用是什么
URL分享:http://jinyejixie.com/article40/gpgoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)云服務(wù)器、ChatGPT標(biāo)簽優(yōu)化、全網(wǎng)營銷推廣、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
新民市| 邓州市| 万盛区| 教育| 祥云县| 阳朔县| 丘北县| 和平区| 全椒县| 承德县| 突泉县| 曲沃县| 潼关县| 龙川县| 奉贤区| 张家川| 手游| 米泉市| 松滋市| 淮北市| 灵台县| 灵川县| 高密市| 台南市| 南宁市| 和平区| 金湖县| 从化市| 司法| 宁波市| 邵阳县| 梁河县| 大方县| 新巴尔虎右旗| 博客| 扶余县| 保德县| 潞城市| 武乡县| 石河子市| 灌南县|