国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS每日一題:函數(shù)式編程中純函數(shù)如何理解?

Zoom / 1702人閱讀

摘要:期函數(shù)式編程中純函數(shù)如何理解概念不依賴執(zhí)行的上下文,也不影響上下文的變量,輸出只由輸入決定代碼理解一下綜上,非純函數(shù)輸入依賴外部變量綜上,非純函數(shù)輸出改變外部變量綜上純函數(shù)輸出輸入不影響外部變量純函數(shù)的好處相信大家發(fā)現(xiàn)了,無論是概念還是代碼

20190313期

函數(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é)

輸出不依賴外部變量

輸出不改變外部變量

固定輸入固定輸出

可緩存,可移植,可測試

關(guān)于JS每日一題

JS每日一題可以看成是一個語音答題社區(qū)
每天利用碎片時間采用60秒內(nèi)的語音形式來完成當(dāng)天的考題
群主在次日0點推送當(dāng)天的參考答案

注 絕不僅限于完成當(dāng)天任務(wù),更多是查漏補缺,學(xué)習(xí)群內(nèi)其它同學(xué)優(yōu)秀的答題思路

點擊加入答題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102552.html

相關(guān)文章

  • JS每日一題函數(shù)編程中代碼組合(compose)如何理解?

    摘要:期函數(shù)式編程中代碼組合如何理解定義顧名思義,在函數(shù)式編程中,就是將幾個有特點的函數(shù)拼湊在一起,讓它們結(jié)合,產(chǎn)生一個嶄新的函數(shù)代碼理解一個將小寫轉(zhuǎn)大寫的函數(shù)一個在字符后加的函數(shù)將兩個函數(shù)組合起來這里假設(shè)我們實現(xiàn)了每日一題每日一題顯示結(jié)果里上面 20190315期 函數(shù)式編程中代碼組合(compose)如何理解? 定義: 顧名思義,在函數(shù)式編程中,Compose就是將幾個有特點的函數(shù)拼湊在...

    Kaede 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    zacklee 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    lbool 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    Alex 評論0 收藏0
  • JS每日一題:什么情況下適合使合vuex?Vuex使用中有幾個步驟?

    摘要:什么情況下適合使合使用中有幾個步驟開始之前先簡單了解一下定義是一個狀態(tài)管理機制采用集中式存儲應(yīng)用所有組件的狀態(tài)嗯,就是一句話能說明白的,沒明白的,我們用代碼再理解一下什么叫集中式式存儲比如下面這段代碼,同時需要用到,那么我們首先能想到就是在 20190121 什么情況下適合使合vuex?Vuex使用中有幾個步驟? 開始之前先簡單了解一下vuex 定義: vuex是一個狀態(tài)管理機制,采用...

    wow_worktile 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<