摘要:原文函數(shù)的純潔性純函數(shù)非純函數(shù)副作用純函數(shù)一個函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那這個函數(shù)就是純函數(shù)。因此,純函數(shù)無法對它的父作用域作出任何修改。更多關(guān)于函數(shù)純潔性的資料
原文:Glossary of Modern JavaScript Concepts: Part 1
函數(shù)的純潔性:純函數(shù)、非純函數(shù)、副作用 純函數(shù)一個函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那這個函數(shù)就是純函數(shù)。這樣的函數(shù)只要參數(shù)是一樣的,返回的結(jié)果就永遠只有一個。以下是一個例子:
function half(x) { return x / 2; }
half(x)函數(shù)接受x作為參數(shù),返回x值的一半。如果傳入8,那么返回的一定是4.調(diào)用一個純函數(shù)時,它的結(jié)果可以完全代替這個純函數(shù),例如我們可以用4代替half(8),無論在哪里使用都不會改變這段代碼的最終結(jié)果,這就是純函數(shù)的引用透明性。
純函數(shù)只依賴它的參數(shù)。例如純函數(shù)不能引用它父作用域的變量(除非這個變量作為參數(shù)傳入)。因此,純函數(shù)無法對它的父作用域作出任何修改。
// some variable that is mutated let someNum = 8; // this is NOT a pure function function impureHalf() { return someNum / 2; }
總結(jié):
純函數(shù)必定帶參數(shù)
輸入一樣,輸出必定一樣
純函數(shù)只改變內(nèi)部狀態(tài)不改變外部狀態(tài)
純函數(shù)無副作用
純函數(shù)不能調(diào)用非純函數(shù)
非純函數(shù)非純函數(shù)會改變它作用域外面的狀態(tài)(state)。很多有副作用的函數(shù)都是非純函數(shù)。
// 非純函數(shù)產(chǎn)生副作用 function showAlert() { alert("This is a side effect!"); } // 非純函數(shù)改變外部變量 var globalVal = 1; function incrementGlobalVal(x) { globalVal += x; } // 一個裝純的非純函數(shù) // 他每次返回的值都不同 function getRandomRange(min, max) { return Math.random() * (max - min) + min; }JavaScript里的副作用
當函數(shù)或表達式修改自己上下文以外的屬性,就是產(chǎn)生了副作用。副作用包括調(diào)用API、操作DOM、調(diào)用alert、數(shù)據(jù)庫操作等。如果一個函數(shù)產(chǎn)生副作用,那么他就是非純的。產(chǎn)生副作用的函數(shù)會改變外部變量,因此讓人捉摸不透,難以測試。
關(guān)于純潔性的總結(jié)很多高質(zhì)量代碼由調(diào)用純函數(shù)的非純函數(shù)組成。這依然在測試和不變性上很有優(yōu)勢。有引用透明性那么就可以寫成記憶函數(shù):儲存函數(shù)結(jié)果,然后重用之前儲存的結(jié)果。這可以判斷這個函數(shù)是否是純函數(shù)。
更多關(guān)于函數(shù)純潔性的資料
Pure versus impure functions
Master the JavaScript Interview: What is a Pure Function?
Functional Programming: Pure Functions
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88626.html
摘要:我將描述我發(fā)現(xiàn)塑造成功框架的一些哲學。根據(jù)我的框架開發(fā)經(jīng)驗,我特此冷凝和總結(jié)我認為任何成功的框架最重要的哲學。現(xiàn)代框架往往是松散耦合的體系結(jié)構(gòu)。全棧框架例如已經(jīng)演變成由松散耦合的組件可以單獨使用或與第三方交換的框架。 來源:Philosophies that Shaped Successful Frameworks 在過去的十年里我們看到了許多軟件框架的出現(xiàn),像 Spring 和 Ru...
摘要:新聞熱點國內(nèi)國外,前端最新動態(tài)發(fā)布近日,正式發(fā)布新版本中提供了一系列的特性與問題修復(fù)。而近日正式發(fā)布,其能夠幫助開發(fā)者快速構(gòu)建應(yīng)用。 前端每周清單第 10 期:Firefox53、React VR發(fā)布、JS測試技術(shù)概述、Microsoft Edge現(xiàn)代DOM樹構(gòu)建及性能之道 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請與InfoQ中文站聯(lián)系。從屬于筆者的 Web 前端入門...
摘要:本文不是標準的中文翻譯,也不是的入門教程,本文雖然以的常見問題切入,但并不適合想要快速了解這些問題的人才是快速了解問題的正解。盡量以英文原版為基礎(chǔ),為了流暢,可能會使用某些名詞的中文翻譯,但會將匹配的英文名詞以此種樣式中出現(xiàn)一次以避免誤解。 簡單易懂的ECMA規(guī)范導讀1 序 最近混SF,恰巧又逢工作方面有了NodeJS的機會,迫切地有教別人怎么寫JS的需求, 我發(fā)現(xiàn)JS這個東西其實...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗Х妒健:瘮?shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:想學好前端,真的要主動,然后對所有的英文文檔耐心一點。在年月日,國際組織發(fā)布了的第六版,該版本正式名稱為,但通常被稱為或者。自此,每年發(fā)布一次新標準。但保留了用于依賴注入的構(gòu)造函數(shù)參數(shù)類型。必須在構(gòu)造函數(shù)中聲明屬性,而不是在類的代碼體中。 從 TypeScript 到 ES6 到 ES5 在我初學前端的很長一段時間,不愿意碰git,不愿意碰框架,總是嫌麻煩,連ES6也沒有怎么去弄明白...
閱讀 1603·2023-04-26 01:54
閱讀 1634·2021-09-30 09:55
閱讀 2654·2021-09-22 16:05
閱讀 1872·2021-07-25 21:37
閱讀 2631·2019-08-29 18:45
閱讀 1895·2019-08-29 16:44
閱讀 1893·2019-08-29 12:34
閱讀 1356·2019-08-23 14:02