日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JavaScript进阶讲解六—>js函数式编程

發布時間:2023/12/10 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript进阶讲解六—>js函数式编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、JavaScript純函數

定義:(維基百科)
符合以下條件的函數,被稱為純函數

  • 此函數在相同的輸入值時,需產生相同的輸出。
  • 函數的輸出和輸入值以外的其他隱藏信息或狀態無關,也和由I/O設備產生的外部輸出無關。
  • 該函數不能有語義上可觀察的函數副作用,諸如“觸發事件”,使輸出設備輸出,或更改輸出值以外物件的內容等。
  • 簡單的來說:
    4. 確定的輸入,一定會產生確定的輸出。
    5. 函數在執行過程中,不能產生副作用。

    1.1、副作用

    定義:表示在執行一個函數時,除了返回函數值之外,還對調用函數產生
    了附加的影響,比如修改了全局變量,修改參數或者改變外部的存儲。

    1.2、純函數案列

    function foo(n1, n2) {return n1 + n2 }

    這就是個純函數,為什么呢? 1. 有確定的輸入(n1和n2) 也有確定的輸出 2. 他沒有修改任何東西。

    var arr = ['a', 'b', 'c', 'd', 'e'] var arr1 = arr.splice(0,2) console.log(arr1); // [a, b] console.log(arr); // ['c', 'd', 'e']

    那我們來看看splice是個純函數嗎? 明顯不是。為什么呢?雖然他有確定的輸入和確定的輸出。但是他修改了arr這個數組,所以他不是。

    var a = 1 function foo() {a = 2 }

    這個也不是,他修改了a

    var obj = { age: 18 } function foo(n1) {n1.age = 20 } foo(obj) console.log(obj); // { age: 20 }

    這個也不是,因為他修改了我們傳入的參數

    var obj = { age: 18 } function foo(n1) {return {...obj,age: 20} } foo(obj) console.log(obj); // { age: 18 }

    這個就是純函數了 因為不論你調多少次foo(obj),他的輸出都是一樣的,obj這個對象是沒被改變的。

    二、JavaScript柯里化

    定義:(維基百科)

  • 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化。
  • 是把接收多個參數的函數變成接收一個單一參數(最初函數的第一個參數)的函數,并且返回接收余下的參數,而且返回結果的新函數的技術。
  • 柯里化聲稱 “如果你固定某些參數,你將得到接受余下參數的一個函數”。
  • 比如這樣

    function foo(n1, n2, n3, n4) {} foo(1, 2, 3, 4)// 柯里化 function bar(n1) {return function(n2) {return function(n3) {return function(n4) {console.log(n1 + n2 + n3 + n4);}}} } bar(1)(2)(3)(4)

    我們把foo寫成了bar的這種形式,這就是函數的柯里化

    那么這有什么好處嗎? 雖然bar的這種效率不如foo這種寫法,但是他可以只傳一部分的參數就可以調用bar了 如bar(1),他不需要傳完所有的參數。

    我們可以得出只傳遞給函數一部分參數來調用它,讓它返回一個函數去處理剩余的參數過程就是柯里化

    2.2、柯里化的作用

  • 讓函數的職責單一
  • 函數式編程中,我們希望一個函數處理的問題盡可能的單一,而不是將一大堆的處理過程交給一個函數來處理,所以我們就可以將每次傳入的參數在單一的函數中進行處理處理完后在下一個函數中再使用處理后的結果

    function bar(n1) {n1 += 2return function(n2) {n2 += 2return function(n3) {n3 += 2return n1 + n2 + n3}} } console.log(bar(1)(2)(3));

    類型與這樣 我們每一個函數都只處理他里面的內容。

  • 邏輯的復用
    因為我們不同的函數在出處理不同的邏輯,所以他的復用性就會很好
  • function foo(n1) {return function(n2) {return n1 + n2} } var add3 = foo(3)add3(1) // 3 + 1 add3(2) // 3 + 2 add3(3) // 3 + 3

    總結

    以上是生活随笔為你收集整理的JavaScript进阶讲解六—>js函数式编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。