javascript
JavaScript进阶讲解六—>js函数式编程
一、JavaScript純函數
定義:(維基百科)
符合以下條件的函數,被稱為純函數
簡單的來說:
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柯里化
定義:(維基百科)
比如這樣
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));類型與這樣 我們每一個函數都只處理他里面的內容。
因為我們不同的函數在出處理不同的邏輯,所以他的復用性就會很好
總結
以上是生活随笔為你收集整理的JavaScript进阶讲解六—>js函数式编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 幽灵交易策略_幽灵交易者策略(附源代码)
- 下一篇: 失望时想起了你是什么歌_你是空你是空是什