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