函式是我們程式最重要的組成部分,下面我們就來回顧下函式都有哪些玩法
簡單來說就是不依賴外部引數的函式:如
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 ...