溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6高階函數(shù)的應用示例

發(fā)布時間:2022-03-21 09:50:53 來源:億速云 閱讀:158 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹ES6高階函數(shù)的應用示例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

tab 函數(shù)

// 此處tap函數(shù)接受一個 vaule 并返回一個包含value 閉包函數(shù),該函數(shù)被執(zhí)行
const tap = (value) => (fn) => (
 typeof(fn) === 'function' && fn(value),
 console.log(value)
)

tab函數(shù)用處:假設你在遍歷一個來自服務器的數(shù)組,并發(fā)現(xiàn)數(shù)據(jù)錯了,因此你想調(diào)試一下,看看數(shù)組包含了什么,就可以用 tab函數(shù)

[1, 2 ,3, 4].forEach((a) => {
 tap(a)((a)=> {
  console.log(a)
 })
});
#### 2) once 函數(shù)

在很多情況下,我們只需要運行一次給定的函數(shù),發(fā)起一次銀行支付請求等,這時就可以用到 once 函數(shù)。

const once = (fn) => {
  let done = false;
  return function () {
    return done?undefined:((done=true),fn.apply(this,arguments))
  }
}
const doPayment = once(()=>{
 console.log('payment is done')
})
doPayment(); // payment is done
console.log(doPayment()); //undefined
#### 3) 函數(shù)柯里化的應用

開發(fā)者編寫代碼的時候應用的不同階級編寫很多日志,我們可以編寫一個如下的日志函數(shù):

const loggerHelper = (mode, initialMessage, errorMessage, lineNo) => {
 if (mode === 'DEBUG') {
  console.debug(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else if (mode === 'ERROR') {
  console.error(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else if (mode === 'WARN') {
  console.warn(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else
  throw "Wrong mode"
}

當開發(fā)者需要向控制臺打印Stats.js文件中的錯誤時,可以用如下方式:

loggerHelper("ERROR", "ERROR At Stats.js", "Invalid argument passed", 23);

這樣對于 我們追求完美可讀的程序員來說,可能是不太能接受的,現(xiàn)在用柯里來優(yōu)化以上代碼,
先簡要說明什么是函數(shù)柯里化:

柯里化是把一個多參數(shù)函數(shù)轉(zhuǎn)換成一個嵌套的一元函數(shù)過程。  

封裝一個把把多參數(shù)函數(shù)轉(zhuǎn)制為一元函數(shù)的curry函數(shù)

let curry = (fn) => {
 if (typeof fn !== 'function') {
  throw Error('No function provided');
 }
 return function curriedFn(...args) {
  // 傳入?yún)?shù)是否小于函數(shù)參數(shù)列表長度,
  if (args.length < fn.length) {
   return function() {
    return curriedFn.apply(null, args.concat([].slice.call(arguments)));
   }
  }
  return fn.apply(null, args)
 }
} 
let errorLogger = curry(loggerHelper)("ERROR")("ERROR At Stats.js");
let debugLogger = curry(loggerHelper)("DEBUG")("ERROR")("Debug At Stats.js");
let warnLogger = curry(loggerHelper)("WARN")("Warn")("At Stats.js");
// 用于錯誤
errorLogger("Error message", 21)
// 用于調(diào)試
debugLogger('Debug message', 233)
// 用于警告
warnLogger("Warn message", 34);

以上是“ES6高階函數(shù)的應用示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

es6
AI