摘要:期函數式編程中純函數如何理解概念不依賴執行的上下文,也不影響上下文的變量,輸出只由輸入決定代碼理解一下綜上,非純函數輸入依賴外部變量綜上,非純函數輸出改變外部變量綜上純函數輸出輸入不影響外部變量純函數的好處相信大家發現了,無論是概念還是代碼
20190313期
函數式編程中純函數如何理解?
概念: 不依賴執行的上下文,也不影響上下文的變量,輸出只由輸入決定
代碼理解一下
// 綜上,非純函數,輸入依賴外部變量 let b = 1 function unPure(a) { return a + b } // 綜上,非純函數,輸出改變外部變量 let o = {} function unPure(object) { object.ex = 1 return object } // 綜上, 純函數, 輸出輸入不影響外部變量 function pure(a) { let b = 1 return a + b }純函數的好處
相信大家發現了,無論是概念還是代碼理解都很簡單, 那為什么要使用純函數呢? 下面我們羅列一下使用純函數的好處
可緩存性
可移植性
可測試性
純函數可以根據輸入來做緩存
// 下面的代碼我們可以發現相同的輸入,再第二次調用的時候都是直接取的緩存 let squareNumber = memoize((x) => { return x*x; }); squareNumber(4); //=> 16 squareNumber(4); // 從緩存中讀取輸入值為 4 的結果 //=> 16 squareNumber(5); //=> 25 squareNumber(5); // 從緩存中讀取輸入值為 5 的結果 //=> 25
怎么實現呢? 我們接著看下面的代碼
const memoize = (f) => { const cache = {}; return () => { var arg_str = JSON.stringify(arguments); // 關鍵就在這里,我們利用純函數相同輸入相同輸出的邏輯,在這里利用cache做一個簡單的緩存,當這個參數之前使用過時,我們立即返回結果就行 cache[arg_str] = cache[arg_str] || f.apply(f, arguments); return cache[arg_str]; }; };
可移植性大白話過來就是,在任何一個地方都可以隨意使用,A項目中使用過的,B項目想要使用直接拿過來就ok的那種
代碼再來理解一下
// 我們注意看下方有兩個注冊的函數 // 不純的, 如果B項目想要用到這個函數,很顯然我們將其依賴的其它服務給搬過去 const signUp = function(attrs) { var user = saveUser(attrs); welcomeUser(user); } // 純的, 我們再來看看下面這個純函數寫法,純函數給了我們足夠多的信息,我們想在B項目使用其功能只需將單個方法搬過去再給其注入需要的參數即可 const signUp = function(Db, Email, attrs) { return function() { var user = saveUser(Db, attrs); welcomeUser(Email, user); }; };
綜上所述,這個就很簡單了,我們不需要關心其它外部的信息,只需要給函數特定的輸入,再斷言其輸出就好了
總結輸出不依賴外部變量
輸出不改變外部變量
固定輸入固定輸出
可緩存,可移植,可測試
關于JS每日一題JS每日一題可以看成是一個語音答題社區
每天利用碎片時間采用60秒內的語音形式來完成當天的考題
群主在次日0點推送當天的參考答案
注 絕不僅限于完成當天任務,更多是查漏補缺,學習群內其它同學優秀的答題思路
點擊加入答題
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102552.html
摘要:期函數式編程中代碼組合如何理解定義顧名思義,在函數式編程中,就是將幾個有特點的函數拼湊在一起,讓它們結合,產生一個嶄新的函數代碼理解一個將小寫轉大寫的函數一個在字符后加的函數將兩個函數組合起來這里假設我們實現了每日一題每日一題顯示結果里上面 20190315期 函數式編程中代碼組合(compose)如何理解? 定義: 顧名思義,在函數式編程中,Compose就是將幾個有特點的函數拼湊在...
摘要:什么情況下適合使合使用中有幾個步驟開始之前先簡單了解一下定義是一個狀態管理機制采用集中式存儲應用所有組件的狀態嗯,就是一句話能說明白的,沒明白的,我們用代碼再理解一下什么叫集中式式存儲比如下面這段代碼,同時需要用到,那么我們首先能想到就是在 20190121 什么情況下適合使合vuex?Vuex使用中有幾個步驟? 開始之前先簡單了解一下vuex 定義: vuex是一個狀態管理機制,采用...
閱讀 2618·2021-11-12 10:36
閱讀 2257·2021-08-23 09:47
閱讀 1675·2019-08-30 15:44
閱讀 1400·2019-08-30 14:10
閱讀 2241·2019-08-29 16:52
閱讀 2333·2019-08-29 16:40
閱讀 1582·2019-08-29 16:17
閱讀 2407·2019-08-26 13:21