中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中的函數式編程實例分析

發布時間:2023-02-25 10:45:34 來源:億速云 閱讀:85 作者:iii 欄目:開發技術

這篇文章主要介紹“JavaScript中的函數式編程實例分析”,在日常操作中,相信很多人在JavaScript中的函數式編程實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaScript中的函數式編程實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    分析

    函數式編程核心規范就是:擁抱 純函數 ,隔離 副作用 。

    因此要弄清楚 函數式編程 的規范,就需要弄懂 純函數 和 副作用 概念和作用。

    我們先來看一下各自的概念:

    純函數:就是一個函數,但它需要滿足以下兩個特征:

    • 相同的輸入參數,總會有相同的輸出

    • 在執行過程中不會產生語義上可觀察的 副作用

    副作用:函數 副作用 指當調用函數時,除了返回函數值之外,還對主調用函數產生附加的影響。

    純函數的理解依賴 副作用,因此不會分開去理解,本篇具體內容結構:

    • 理解純函數

    • 純函數的作用

    • 如何對待副作用

    理解純函數

    下面我們從 純函數 的兩個特征來理解。

    相同的輸入參數,總會有相同的輸出

    比如:

    function add(a, b) {
        return a + b
    }
    
    add(1, 2); // 3

    執行 add 函數,不管執行多少次,不管在 JavaScript 上下文哪里執行,相同的參數傳遞進去后,總會返回相同的輸出,且不會對外界造成影響,是一個 純函數 。

    如果改成這樣:

    let c = 1;
    
    function add(a, b) {
        return a + b + c;
    }
    
    add(1, 2); // 4
    c = 5;
    add(1, 2); // 8

    這時候 add 調用了兩次,傳遞進去的參數沒有變化,但返回結果卻不相同,它受到了外界變量的干擾,不屬于純函數。

    因此,可以推斷出要想 相同的輸入參數,總會有相同的輸出 ,函數內部不能使用函數外部的 變量 ,但不可變的 常量 是可以的,比如在使用 redux時,定義 reducer 的 action 常常就會使用常量來定義。

    相同的輸入參數,總會有相同的輸出 可以保證我們程序的穩定性,返回結果不受外界影響。

    在執行過程中不會產生語義上可觀察的 副作用

    比如:

    function add(a, b) {
        const result = a + b;
        console.log(result);
        return result;
    }
    add(1, 2); // 3

    上面的 add 函數添加了 console.log 把結果打印到了瀏覽器的控制臺,屬于對外界造成了影響,產生了 副作用

    再比如一個請求接口的函數:

    async function getList(url) {
        const result = await fetch(url);
        return result;
    }

    內部調用了請求函數 fetchfetch 函數執行后返回的內容并不能保證每一次都一樣,受到了網絡和服務器等原因的影響。因此,fetch 函數本身就不是一個純函數,getList 受到其影響,也變得不純了。

    因此,如果一個主函數內部調用了不純函數,不純的原因還是對主函數外部產生了副作用或者收到了影響,那么這個函數就不是純函數。

    純函數 的作用

    純函數 的兩大特征,合起來可以這樣看:不受外界影響,不影響外界。也就是它可以解決程序中 不確定性 的問題。

    不確定性的危害

    以測試過程為例:單元測試的主要判斷的依據就是函數的輸入和輸出。如果對于同樣的輸入,函數不能夠給到確定的輸出,那就很難進行測試了。

    不確定性還會導致我們的程序中出現各種風險,比如:

    • 代碼難以被調試

    • 數據變化難以被追溯

    • 計算結果難以被復用(代碼難以封裝)

    • 程序運行中容易出現各種突發性的事件

    確定性的好處

    確定性的函數讓我們的程序更加有保障,也能解決很多實際性的問題,比如:

    • 代碼邏輯更加清晰。

    • 更容易進行測試,結果只依賴輸入,測試時可以確保輸出穩定。

    • 更容易維護和重構,我們可以寫出質量更高的代碼。

    • 更容易調用,我們不用擔心函數會有什么副作用。

    • 結果可以緩存,因為相同的輸入總是會得到相同的輸出。

    • 代碼復用性強,提升開發者的編碼效率。

    如何對待副作用

    解決 副作用 等于解決了影響外界的問題和部分不受外界影響的問題。因此消除副作用,足以解決函數中大多數的不確定性問題。

    但對于一個完整的程序來說,副作用卻至關重要,沒有副作用,程序就不能和外界溝通,就不能產生對外界的作用,這樣程序本身就沒有了意義和價值。

    因此我們要做的不是消除副作用,而是擁抱 純函數 ,隔離 副作用 。將計算邏輯與副作用做合理的分層解耦,從而提升我們的編碼質量和執行效率。

    到此,關于“JavaScript中的函數式編程實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    陈巴尔虎旗| 达州市| 紫阳县| 县级市| 邢台县| 平谷区| 黔东| 安丘市| 冕宁县| 安宁市| 宁国市| 大厂| 五大连池市| 平定县| 桓仁| 满洲里市| 临沧市| 天祝| 南昌县| 都江堰市| 临夏市| 南陵县| 蓬莱市| 忻城县| 云浮市| 新丰县| 兰溪市| 永修县| 临沭县| 九江市| 文水县| 大厂| 和平县| 大连市| 治多县| 上林县| 巢湖市| 加查县| 随州市| 九龙城区| 阳朔县|