小編給大家分享一下JavaScript函數(shù)式編程中純函數(shù)的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)網(wǎng)站建設(shè)、手機網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。成都創(chuàng)新互聯(lián)公司擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。函數(shù)式編程中純函數(shù)如何理解?
概念: 不依賴執(zhí)行的上下文,也不影響上下文的變量,輸出只由輸入決定
代碼理解一下
// 綜上,非純函數(shù),輸入依賴外部變量 let b = 1 function unPure(a) { return a + b } // 綜上,非純函數(shù),輸出改變外部變量 let o = {} function unPure(object) { object.ex = 1 return object } // 綜上, 純函數(shù), 輸出輸入不影響外部變量 function pure(a) { let b = 1 return a + b }純函數(shù)的好處
相信大家發(fā)現(xiàn)了,無論是概念還是代碼理解都很簡單, 那為什么要使用純函數(shù)呢? 下面我們羅列一下使用純函數(shù)的好處
純函數(shù)可以根據(jù)輸入來做緩存
// 下面的代碼我們可以發(fā)現(xiàn)相同的輸入,再第二次調(diào)用的時候都是直接取的緩存 let squareNumber = memoize((x) => { return x*x; }); squareNumber(4); //=> 16 squareNumber(4); // 從緩存中讀取輸入值為 4 的結(jié)果 //=> 16 squareNumber(5); //=> 25 squareNumber(5); // 從緩存中讀取輸入值為 5 的結(jié)果 //=> 25
怎么實現(xiàn)呢? 我們接著看下面的代碼
const memoize = (f) => { const cache = {}; return () => { var arg_str = JSON.stringify(arguments); // 關(guān)鍵就在這里,我們利用純函數(shù)相同輸入相同輸出的邏輯,在這里利用cache做一個簡單的緩存,當(dāng)這個參數(shù)之前使用過時,我們立即返回結(jié)果就行 cache[arg_str] = cache[arg_str] || f.apply(f, arguments); return cache[arg_str]; }; };可移植性
可移植性大白話過來就是,在任何一個地方都可以隨意使用,A項目中使用過的,B項目想要使用直接拿過來就ok的那種
代碼再來理解一下
// 我們注意看下方有兩個注冊的函數(shù) // 不純的, 如果B項目想要用到這個函數(shù),很顯然我們將其依賴的其它服務(wù)給搬過去 const signUp = function(attrs) { var user = saveUser(attrs); welcomeUser(user); } // 純的, 我們再來看看下面這個純函數(shù)寫法,純函數(shù)給了我們足夠多的信息,我們想在B項目使用其功能只需將單個方法搬過去再給其注入需要的參數(shù)即可 const signUp = function(Db, Email, attrs) { return function() { var user = saveUser(Db, attrs); welcomeUser(Email, user); }; };可測試性
綜上所述,這個就很簡單了,我們不需要關(guān)心其它外部的信息,只需要給函數(shù)特定的輸入,再斷言其輸出就好了
總結(jié)以上是“JavaScript函數(shù)式編程中純函數(shù)的案例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!