理解高階函式,修煉程式設計內功

2021-10-23 18:19:45 字數 2186 閱讀 5167

函式是我們程式最重要的組成部分,下面我們就來回顧下函式都有哪些玩法

簡單來說就是不依賴外部引數的函式:如

const num =2;

function

fn(arg)

// fn 不是純函式

function

fn2(num,arg)

// fn2 是純函式,可以使用es6箭頭函式,讓函式看起來更加簡潔

const

fn2=

(num,arg)

=> num*arg

純函式是我們實現高階函式的基礎,我們日常寫函式時也應該盡量寫純函式

高階函式的定義也很簡單:引數是乙個函式,或者返回乙個函式的函式,如下函式都是高階函式

function

fn(fn)

function

fn2(

)}

我們經常說的閉包也是高階函式的一種,如:

functionfn(

)return fn2

}

此時,fn2可以說是個閉包函式,fn可以說是高階函式

我們常見的一些方法如map,every,some,都是es6給我們封裝好的高階函式,那他們內部都是如果實現的呢?下面我們就模擬實現個map方法

array.prototype.

mymap

=function

(fn, context)

return temp

}

測試

const arr =[1

,2,3

,4]const arr2 = arr.

mymap

(item =>

)// 輸出 [2,3,4,5]

當需要只執行一次的函式時,我們就可以使用高階函式來實現,如:

function

once

(fn)

else}}

function

dome()

const d =

once

(dome)d(

)d()

/*我要執行

已經執行過了哦

*/

柯里化是把乙個多引數函式轉化成乙個巢狀的一元函式的過程,從功能上說,它實現了函式功能的細化。

下面我們先簡單實現乙個柯里化函式

letfn=

(x,y)

=>x+y

// 使用fn函式fn(

1,2)

// 3

把fn柯里化

letfn=

(x, y)

=> x + y;

const

curry

=(fn)

=>;}

;};const fn =

curry

(fn);fn

(1)(

2);// 3

可以看見,我們在使用fn函式的時候可以單個傳遞引數,這樣更利於函式的解耦,下面我們來封裝乙個通用的柯里化函式,這樣不管我們的引數有幾個,都可以變成單一引數

const

curry

=function

(fn);}

returnfn(

...args);}

}

我們使用curry

constfn=

(x, y, z, a)

=> x + y + z + a;

const myfn =

curry

(fn)

;console.

log(

myfn(1

)(2)

(3)(

1));

// 7

curry函式實現的原理就是先把引數收集起來,然後再執行

函式是程式語言的靈魂,高階函式需要我們細細品味才能體會到程式設計的魅力

函式式程式設計 高階函式

高階函式英文叫higher order function。什麼是高階函式?我們以實際 為例子,一步一步深入概念。1 變數可以指向函式 以python內建的求絕對值的函式abs 為例,呼叫該函式用以下 abs 10 10但是,如果只寫abs呢?abs 可見,abs 10 是函式呼叫,而abs是函式本身...

高階函式程式設計補充

zip 案列 l1 1,2,3,4,5,6,7 s1 a b c d e f g z zip l1,s1 print type z for i in z print i 預設從零開始建立索引 l1 12,43,543,665,654,24,233,43 em enumerate l1 l2 i fo...

php高階程式設計 函式

1.php函式 1.使用者自定義函式 複製 如下 function 函式名字 parameter,注意 函式名不能與系統函式或使用者已經定義的函式重名。parameter為函式引數,函式一般可以有0個或多個引數,2.引數的傳遞 引數是通過值來傳遞的,例如前面定義funwww.cppcns.comc ...