這篇文章主要介紹ES6高階函數的應用示例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
tab 函數
// 此處tap函數接受一個 vaule 并返回一個包含value 閉包函數,該函數被執行 const tap = (value) => (fn) => ( typeof(fn) === 'function' && fn(value), console.log(value) )
tab函數用處:假設你在遍歷一個來自服務器的數組,并發現數據錯了,因此你想調試一下,看看數組包含了什么,就可以用 tab函數
[1, 2 ,3, 4].forEach((a) => {
tap(a)((a)=> {
console.log(a)
})
});
#### 2) once 函數在很多情況下,我們只需要運行一次給定的函數,發起一次銀行支付請求等,這時就可以用到 once 函數。
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) 函數柯里化的應用開發者編寫代碼的時候應用的不同階級編寫很多日志,我們可以編寫一個如下的日志函數:
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"
}當開發者需要向控制臺打印Stats.js文件中的錯誤時,可以用如下方式:
loggerHelper("ERROR", "ERROR At Stats.js", "Invalid argument passed", 23);這樣對于 我們追求完美可讀的程序員來說,可能是不太能接受的,現在用柯里來優化以上代碼,
先簡要說明什么是函數柯里化:
柯里化是把一個多參數函數轉換成一個嵌套的一元函數過程。
封裝一個把把多參數函數轉制為一元函數的curry函數
let curry = (fn) => {
if (typeof fn !== 'function') {
throw Error('No function provided');
}
return function curriedFn(...args) {
// 傳入參數是否小于函數參數列表長度,
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)
// 用于調試
debugLogger('Debug message', 233)
// 用于警告
warnLogger("Warn message", 34);以上是“ES6高階函數的應用示例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。