JavaScript之高階函數(shù)

高階函數(shù)的英文名叫 Higher-Order Function,熟悉 React 的朋友應(yīng)該知道高階組件 Higher-Order Component。沒(méi)錯(cuò),React 的高階組件本質(zhì)上就是高階函數(shù)。

那么,什么是高階函數(shù)呢?
高階函數(shù)源自于函數(shù)式編程(不熟悉的朋友請(qǐng)看《javascript中的函數(shù)式編程》),是函數(shù)式編程的基本技術(shù)。

那么,JS作為一門(mén)“一切皆為對(duì)象”的語(yǔ)言,是如何擁有函數(shù)式編程的能力呢?
是因?yàn)樵贘S中函數(shù)是一等公民,即函數(shù)可以被賦值給變量,被變量引用,這便使得函數(shù)可以作為參數(shù),在其他函數(shù)間相互傳遞:

/** 
 * 數(shù)值轉(zhuǎn)換
 * @param {Number} val 要被處理的數(shù)值
 * @param {Function} fn 處理輸入的val
 * @return {Number || String}
 */
const toConvert = function(val, fn) {
    return fn(val);
};

const addUnitW = function(val) {
    return val + 'W';
};

toConvert(123.1, Math.ceil); // 124
toConvert(123.1, addUnitW); // "123.1W"



另外,JS的回調(diào)函數(shù)同樣是以實(shí)參形式傳入其他函數(shù)中,這也是高階函數(shù)(在函數(shù)式編程中回調(diào)函數(shù)被稱(chēng)為 lambda表達(dá)式):

[1, 2, 3, 4, 5].map(d => d ** 2); // [1, 4, 9, 16, 25]

// 以上,等同于:
const square = d => d ** 2;
[1, 2, 3, 4, 5].map(square); // [1, 4, 9, 16, 25]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容