本文實例講述了JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions)用法。分享給大家供大家參考,具體如下:
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計、平南網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
高階函數(shù)(higher-order functions),就是返回其它函數(shù)的函數(shù),或者使用其它函數(shù)作為它的參數(shù)的函數(shù)。
使用函數(shù)作為參數(shù)
因為函數(shù)本身就是一個值,所以可以讓函數(shù)作為參數(shù)傳遞給其它的函數(shù)。JavaScript 有些函數(shù)就需要用到函數(shù)類型的參數(shù),比如 Array.map。
比如我有一組數(shù)據(jù):
const names = ['小貓', '小狗', '小刺猬']
我要分別問候一下這組數(shù)據(jù)里的每個項目:
const greetings = names.map(function(name) { return `hi ~ ${name}` }) console.log(greetings) // ["hi ~ 小貓", "hi ~ 小狗", "hi ~ 小刺猬"]
上面的 map 方法里用了一個匿名函數(shù)作為它的參數(shù)。在這個函數(shù)里面,我們在數(shù)組里的每個項目的前面都加上了一個 “hi ~” ,map 會返回一個新的數(shù)組,這個數(shù)組我交給了 greetings 變量。
用箭頭函數(shù)會更簡潔一些:
const greetings = names.map(name => `hi ~ ${name}`)
高階函數(shù)
高階函數(shù)(higher-order functions)。在 JavaScript 里面,函數(shù)跟普通的對象沒啥大區(qū)別,所以你可以讓函數(shù)作為參數(shù)傳遞到其它的函數(shù)里面,你也可以在函數(shù)里返回函數(shù)。使用函數(shù)作為參數(shù)的函數(shù),或者返回函數(shù)的函數(shù),這些函數(shù)被稱為高階函數(shù)(higher-order functions)。
比如剛才我們用的 map 就是一個高階函數(shù),因為它會用到一個函數(shù)作為它的參數(shù)。
再看一個例子:
const robot = (name, action) => { return action(name) } const greet = (name) => { return `hello, ${name}` } const greeting = robot(' 您好 ', greet) // 返回 “ hello, 您好 ”
robot 是個函數(shù),它支持兩個參數(shù),name 與 action,這里的 action 參數(shù)的類型是一個函數(shù)。在 robot 里面返回了 action ,并且把 name 參數(shù)的值交給了 action。接下面我們又定義了一個函數(shù)叫 greet,它接受一個參數(shù)是 name ,這個函數(shù)會返回一個字符串。
然后我們用了一下 robot 這個函數(shù),設(shè)置了一下它的兩個參數(shù)的值,name 參數(shù)的值是 ' 您好 ‘,action 參數(shù)的值是我們定義的 greet 這個函數(shù)。執(zhí)行的結(jié)果就會是:
hello, 您好
我們可以再去定義一下函數(shù):
const goodbye = (name) => { return `bye, ${name}` }
然后再用一下 robot 函數(shù):
const byeBye = robot(' 您好 ', goodbye)
這次會返回:
bye, 您好
完整的例子:
const robot = (name, action) => { return action(name) } const greet = (name) => { return `hello, ${name}` } const greeting = robot(' 您好 ', greet) console.log(greeting) const goodbye = (name) => { return `bye, ${name}` } const byeBye = robot(' 您好 ', goodbye) console.log(byeBye)
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
網(wǎng)站標(biāo)題:JavaScript函數(shù)式編程(FunctionalProgramming)高階函數(shù)(Higherorderfunctions)用法分析
文章URL:http://www.rwnh.cn/article20/jisijo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、App開發(fā)、電子商務(wù)、網(wǎng)站收錄、品牌網(wǎng)站制作、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)