JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions)用法分析
本文實(shí)例講述了JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions)用法。分享給大家供大家參考,具體如下:
高階函數(shù)(higher-order functions),就是返回其它函數(shù)的函數(shù),或者使用其它函數(shù)作為它的參數(shù)的函數(shù)。
使用函數(shù)作為參數(shù)
因?yàn)楹瘮?shù)本身就是一個(gè)值,所以可以讓函數(shù)作為參數(shù)傳遞給其它的函數(shù)。JavaScript 有些函數(shù)就需要用到函數(shù)類型的參數(shù),比如 Array.map。
比如我有一組數(shù)據(jù):
const names = ['小貓', '小狗', '小刺猬']
我要分別問候一下這組數(shù)據(jù)里的每個(gè)項(xiàng)目:
const greetings = names.map(function(name) {
return `hi ~ ${name}`
})
console.log(greetings)
// ["hi ~ 小貓", "hi ~ 小狗", "hi ~ 小刺猬"]
上面的 map 方法里用了一個(gè)匿名函數(shù)作為它的參數(shù)。在這個(gè)函數(shù)里面,我們?cè)跀?shù)組里的每個(gè)項(xiàng)目的前面都加上了一個(gè) “hi ~” ,map 會(huì)返回一個(gè)新的數(shù)組,這個(gè)數(shù)組我交給了 greetings 變量。
用箭頭函數(shù)會(huì)更簡(jiǎn)潔一些:
const greetings = names.map(name => `hi ~ ${name}`)
高階函數(shù)
高階函數(shù)(higher-order functions)。在 JavaScript 里面,函數(shù)跟普通的對(duì)象沒啥大區(qū)別,所以你可以讓函數(shù)作為參數(shù)傳遞到其它的函數(shù)里面,你也可以在函數(shù)里返回函數(shù)。使用函數(shù)作為參數(shù)的函數(shù),或者返回函數(shù)的函數(shù),這些函數(shù)被稱為高階函數(shù)(higher-order functions)。
比如剛才我們用的 map 就是一個(gè)高階函數(shù),因?yàn)樗鼤?huì)用到一個(gè)函數(shù)作為它的參數(shù)。
再看一個(gè)例子:
const robot = (name, action) => {
return action(name)
}
const greet = (name) => {
return `hello, ${name}`
}
const greeting = robot(' 您好 ', greet)
// 返回 “ hello, 您好 ”
robot 是個(gè)函數(shù),它支持兩個(gè)參數(shù),name 與 action,這里的 action 參數(shù)的類型是一個(gè)函數(shù)。在 robot 里面返回了 action ,并且把 name 參數(shù)的值交給了 action。接下面我們又定義了一個(gè)函數(shù)叫 greet,它接受一個(gè)參數(shù)是 name ,這個(gè)函數(shù)會(huì)返回一個(gè)字符串。
然后我們用了一下 robot 這個(gè)函數(shù),設(shè)置了一下它的兩個(gè)參數(shù)的值,name 參數(shù)的值是 ' 您好 ‘,action 參數(shù)的值是我們定義的 greet 這個(gè)函數(shù)。執(zhí)行的結(jié)果就會(huì)是:
hello, 您好
我們可以再去定義一下函數(shù):
const goodbye = (name) => {
return `bye, ${name}`
}
然后再用一下 robot 函數(shù):
const byeBye = robot(' 您好 ', goodbye)
這次會(huì)返回:
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錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JavaScript函數(shù)式編程Thunk原理解析
- javascript函數(shù)式編程基礎(chǔ)
- JavaScript中的函數(shù)式編程詳解
- JavaScript函數(shù)式編程(Functional Programming)組合函數(shù)(Composition)用法分析
- JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)用法分析
- JavaScript函數(shù)式編程(Functional Programming)純函數(shù)用法分析
- JavaScript函數(shù)式編程(Functional Programming)聲明式與命令式實(shí)例分析
- 詳解用函數(shù)式編程對(duì)JavaScript進(jìn)行斷舍離
- JavaScript函數(shù)式編程實(shí)現(xiàn)介紹
相關(guān)文章
JavaScript仿小米實(shí)現(xiàn)球體分解動(dòng)畫
用過小米手機(jī)的應(yīng)該見過它的垃圾清理ui界面吧,本文將利用JavaScript模擬這一界面實(shí)現(xiàn)球體分解動(dòng)畫,感興趣的小伙伴可以學(xué)習(xí)一下2022-06-06
原生JavaScrpit中異步請(qǐng)求Ajax實(shí)現(xiàn)方法
這篇文章主要介紹了原生JavaScrpit中異步請(qǐng)求Ajax實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
UniApp?WebView頁(yè)面中的請(qǐng)求跨域問題解決
在使用UniApp開發(fā)中,通過WebView組件加載本地網(wǎng)頁(yè)時(shí),往往會(huì)遇到跨域問題,下面這篇文章主要介紹了UniApp?WebView頁(yè)面中的請(qǐng)求跨域問題解決的相關(guān)資料,需要的朋友可以參考下2024-10-10
javascript中break,continue和return語(yǔ)句用法小結(jié)
break,continue和return這三個(gè)語(yǔ)句的用法新手們經(jīng)常弄混淆,至少在我學(xué)習(xí)c語(yǔ)言的時(shí)候經(jīng)常把它們的用法給搞錯(cuò)。不過現(xiàn)在好了,我已徹底搞清楚它們之間的用法2012-05-05
JS+CSS實(shí)現(xiàn)的豎向簡(jiǎn)潔折疊菜單效果代碼
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的豎向簡(jiǎn)潔折疊菜單效果代碼,涉及JavaScript鏈?zhǔn)讲僮髋c元素遍歷等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
JS實(shí)現(xiàn)仿微博可關(guān)閉彈出層效果
這篇文章主要介紹了JS實(shí)現(xiàn)仿微博可關(guān)閉彈出層效果,涉及JavaScript彈出窗口的設(shè)置及頁(yè)面元素動(dòng)態(tài)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
JavaScript實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁(yè)之間通信
這篇文章主要為大家詳細(xì)介紹了JavaScript如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁(yè)之間通信,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
javascript事件捕獲機(jī)制【深入分析IE和DOM中的事件模型】
這篇文章主要介紹了javascript事件捕獲機(jī)制,結(jié)合實(shí)例形式分析了冒泡的原理、事件捕獲、各瀏覽器事件處理機(jī)制與IE和DOM中的事件模型等,需要的朋友可以參考下2016-12-12
JS 清除字符串?dāng)?shù)組中,重復(fù)元素的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫S 清除字符串?dāng)?shù)組中,重復(fù)元素的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05

