这篇文章主要介绍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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。