亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中的純函數(shù)與偏函數(shù)你了解嗎

 更新時(shí)間:2023年05月16日 10:21:48   作者:施主來(lái)了  
JS中,純函數(shù)指在相同的輸入下始終產(chǎn)生相同的輸出并且沒(méi)有副作用的函數(shù),偏函數(shù)指一種創(chuàng)建新函數(shù)的方法,通過(guò)預(yù)設(shè)一個(gè)或多個(gè)參數(shù)從而實(shí)現(xiàn)對(duì)原始函數(shù)的封裝和定制,本文主要來(lái)講講純函數(shù)與偏函數(shù)的一些使用,需要的可以參考一下

純函數(shù)

介紹

在JavaScript中,純函數(shù)是指在相同的輸入下,始終產(chǎn)生相同的輸出,并且沒(méi)有副作用的函數(shù)。純函數(shù)不會(huì)修改或依賴(lài)于函數(shù)之外的狀態(tài),也不會(huì)對(duì)外部環(huán)境產(chǎn)生任何可觀(guān)察的影響。

以下是純函數(shù)的特點(diǎn):

  • 確定性:對(duì)于相同的輸入,純函數(shù)總是產(chǎn)生相同的輸出。這意味著,如果你用相同的參數(shù)多次調(diào)用純函數(shù),它將始終返回相同的結(jié)果。
  • 無(wú)副作用:純函數(shù)不會(huì)修改其外部環(huán)境,包括全局變量、輸入?yún)?shù)對(duì)象等。這意味著,純函數(shù)不會(huì)產(chǎn)生任何可觀(guān)察到的副作用,例如更改全局狀態(tài)或直接修改傳入的參數(shù)。

使用純函數(shù)的好處包括:

  • 可預(yù)測(cè)性:由于純函數(shù)的確定性特性,它們的行為很容易預(yù)測(cè),有助于提高代碼的可讀性和可維護(hù)性。
  • 可測(cè)試性:純函數(shù)便于編寫(xiě)單元測(cè)試,因?yàn)樗鼈兊男袨橥耆Q于輸入?yún)?shù),不依賴(lài)于外部狀態(tài)。
  • 引用透明性:意味著函數(shù)調(diào)用可以被其返回值替代,而不會(huì)影響程序的行為。這種特性使得代碼更易于理解和推理。
  • 函數(shù)組合性:由于純函數(shù)不依賴(lài)于外部狀態(tài),它們可以方便地進(jìn)行函數(shù)組合。通過(guò)將多個(gè)純函數(shù)組合在一起,可以構(gòu)建出更復(fù)雜的功能,同時(shí)保持代碼的清晰性和可維護(hù)性。
  • 并發(fā)安全性:由于純函數(shù)沒(méi)有共享的狀態(tài),因此它們?cè)诓l(fā)環(huán)境下是安全的。多個(gè)線(xiàn)程或進(jìn)程可以同時(shí)調(diào)用純函數(shù),而不會(huì)導(dǎo)致競(jìng)態(tài)條件或其他并發(fā)問(wèn)題。

下面是一些簡(jiǎn)單的純函數(shù)示例:

示例詳解

1.求和:

function add(a, b) {
  return a + b;
}

2.過(guò)濾數(shù)組中的奇數(shù):

function filterOdds(arr) {
  return arr.filter((num) => num % 2 !== 0);
}

3.獲取對(duì)象數(shù)組中指定屬性的值:

function pluck(arr, key) {
  return arr.map((obj) => obj[key]);
}

4.將字符串中的首字母大寫(xiě):

function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}

需要注意的是,這些示例中的純函數(shù)都沒(méi)有修改原始數(shù)據(jù)或外部狀態(tài),而是通過(guò)返回新的結(jié)果來(lái)實(shí)現(xiàn)功能。它們的輸出僅取決于輸入,沒(méi)有副作用,因此在使用時(shí)更可靠和可預(yù)測(cè)。

純函數(shù)的關(guān)鍵是避免對(duì)外部狀態(tài)的依賴(lài)和修改,以及確保相同的輸入始終產(chǎn)生相同的輸出。這種特性使得純函數(shù)在函數(shù)式編程和無(wú)副作用的場(chǎng)景中特別有價(jià)值。

偏函數(shù)

偏函數(shù)是一種在函數(shù)式編程中常見(jiàn)的編程技巧。在 JavaScript 中,偏函數(shù)指的是一種創(chuàng)建新函數(shù)的方法,通過(guò)預(yù)設(shè)一個(gè)或多個(gè)參數(shù),從而實(shí)現(xiàn)對(duì)原始函數(shù)的封裝和定制。偏函數(shù)的主要作用是降低函數(shù)調(diào)用時(shí)的參數(shù)復(fù)雜度,使函數(shù)更具有可重用性。

在 JavaScript 中,我們可以通過(guò)閉包來(lái)實(shí)現(xiàn)偏函數(shù)。以下是一個(gè)簡(jiǎn)單的偏函數(shù)實(shí)現(xiàn):

function partial(fn, ...presetArgs) {
  return function(...laterArgs) {
    return fn.apply(this, presetArgs.concat(laterArgs));
  };
}

上述 partial 函數(shù)接收一個(gè)函數(shù) fn 作為參數(shù),以及一系列預(yù)設(shè)參數(shù)(...presetArgs)。partial 函數(shù)返回一個(gè)新的函數(shù),當(dāng)新函數(shù)被調(diào)用時(shí),它將預(yù)設(shè)參數(shù)和新傳入的參數(shù)(...laterArgs)合并,并以此調(diào)用原始函數(shù) fn。

舉個(gè)例子,假設(shè)我們有一個(gè)簡(jiǎn)單的加法函數(shù) add:

function add(x, y) {
  return x + y;
}

我們可以使用偏函數(shù) partial 來(lái)創(chuàng)建一個(gè)新的函數(shù) addFive,該函數(shù)會(huì)將第一個(gè)參數(shù)預(yù)設(shè)為 6:

const addFive = partial(add, 6);
console.log(addFive(3)); // 9

這樣,我們就可以通過(guò)偏函數(shù)來(lái)生成不同的函數(shù)實(shí)例,減少重復(fù)代碼。

當(dāng)然,除了上面提到的基本偏函數(shù)實(shí)現(xiàn)方法,我們還可以通過(guò)其他方式來(lái)實(shí)現(xiàn)偏函數(shù)。以下是另一個(gè)常見(jiàn)的偏函數(shù)實(shí)現(xiàn)方法,使用了 ES6 的箭頭函數(shù):

const partial = (fn, ...presetArgs) => (...laterArgs) => fn(...presetArgs, ...laterArgs);

這種實(shí)現(xiàn)方式更簡(jiǎn)潔,原理與之前介紹的方法相同。

此外,我們還可以通過(guò) bind() 方法來(lái)實(shí)現(xiàn)偏函數(shù)。bind() 方法允許我們創(chuàng)建一個(gè)新的函數(shù),預(yù)先指定一些參數(shù)。例如:

function add(x, y) {
  return x + y;
}
???????const addFive = add.bind(null, 6);
console.log(addFive(3)); // 9

在這個(gè)例子中,我們使用了 add.bind() 方法來(lái)創(chuàng)建一個(gè)新的 addFive 函數(shù),其中第一個(gè)參數(shù)已經(jīng)預(yù)設(shè)為 6。bind() 方法的第一個(gè)參數(shù)用于指定新函數(shù)的 this 值,這里我們傳入 null,表示不修改 this 值。

總之,偏函數(shù)是一種有用的編程技巧,它可以幫助我們降低函數(shù)調(diào)用的參數(shù)復(fù)雜度,提高代碼的可重用性??梢酝ㄟ^(guò)閉包、箭頭函數(shù)或者 bind() 方法來(lái)實(shí)現(xiàn)偏函數(shù)。

到此這篇關(guān)于JavaScript中的純函數(shù)你了解嗎的文章就介紹到這了,更多相關(guān)JavaScript純函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論