本文實例講述了JavaScript函數式編程(Functional Programming)高階函數(Higher order functions)用法。分享給大家供大家參考,具體如下:
高階函數(higher-order functions),就是返回其它函數的函數,或者使用其它函數作為它的參數的函數。
使用函數作為參數
因為函數本身就是一個值,所以可以讓函數作為參數傳遞給其它的函數。JavaScript 有些函數就需要用到函數類型的參數,比如 Array.map。
比如我有一組數據:
const names = ['小貓', '小狗', '小刺猬']
我要分別問候一下這組數據里的每個項目:
const greetings = names.map(function(name) { return `hi ~ ${name}`})console.log(greetings)// ["hi ~ 小貓", "hi ~ 小狗", "hi ~ 小刺猬"]
上面的 map 方法里用了一個匿名函數作為它的參數。在這個函數里面,我們在數組里的每個項目的前面都加上了一個 “hi ~” ,map 會返回一個新的數組,這個數組我交給了 greetings 變量。
用箭頭函數會更簡潔一些:
const greetings = names.map(name => `hi ~ ${name}`)
高階函數
高階函數(higher-order functions)。在 JavaScript 里面,函數跟普通的對象沒啥大區別,所以你可以讓函數作為參數傳遞到其它的函數里面,你也可以在函數里返回函數。使用函數作為參數的函數,或者返回函數的函數,這些函數被稱為高階函數(higher-order functions)。
比如剛才我們用的 map 就是一個高階函數,因為它會用到一個函數作為它的參數。
再看一個例子:
const robot = (name, action) => { return action(name)}const greet = (name) => { return `hello, ${name}`}const greeting = robot(' 您好 ', greet)// 返回 “ hello, 您好 ”
robot 是個函數,它支持兩個參數,name 與 action,這里的 action 參數的類型是一個函數。在 robot 里面返回了 action ,并且把 name 參數的值交給了 action。接下面我們又定義了一個函數叫 greet,它接受一個參數是 name ,這個函數會返回一個字符串。
然后我們用了一下 robot 這個函數,設置了一下它的兩個參數的值,name 參數的值是 ' 您好 ‘,action 參數的值是我們定義的 greet 這個函數。執行的結果就會是:
hello, 您好
我們可以再去定義一下函數:
const goodbye = (name) => { return `bye, ${name}`}
然后再用一下 robot 函數:
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)
希望本文所述對大家JavaScript程序設計有所幫助。
新聞熱點
疑難解答