柯里化理解与JS实现
什么是柯里化
严格来说一个函数只有一个参数,将具有多个参数的函数转换为单参数函数链的方式,这就是currying。后来演变成支持不定参数的函数链的形式流行起来。
// 在JS中可以常见这样调用方式 add(1)(2)(3) // 6 add() // 输出结果 > 6 // 或者 add(1)(2)(3)() === 6 // 或者 add(1) add(2) add(3) add() === 6
柯里化的作用
- 闭包
- 延迟执行
- 参数复用
JS中实现柯里化
这是个柯里化的装饰器
function Currying(fn) { let args = [].slice.call(arguments,1); function g() { if(arguments.length > 0){ args.push.apply(args, arguments) return g } else { return fn.apply(fn, args) } } return g }
做个测试
// 定义一个求和函数 function add() { let count = 0 if(arguments.length > 0) { for(let i = 0; i < arguments.length; i++){ count += arguments[i] } } return count } // 测试 const _add = Currying(add) _add(1) _add(2) _add(3)() // > 6
原文地址:https://segmentfault.com/a/1190000018585893
相关推荐
-
再谈谈 Promise, setTimeout, rAF, rIC javascript/jquery
2019-5-18
-
一篇文章讲清楚React的基础概念 javascript/jquery
2019-3-7
-
js变量提升和函数提升 javascript/jquery
2019-7-21
-
如何编写一个 plugin javascript/jquery
2019-10-3
-
web 图像技术:前端引入图片的各种方式及其优缺点 javascript/jquery
2020-5-25
-
浅谈ES5的const以及strict mode javascript/jquery
2019-5-16
-
Puppeteer前端自动化测试实践 javascript/jquery
2019-2-27
-
职场瓶颈:2~4 年前端走出离职困境与舒适区 javascript/jquery
2020-6-12
-
原生js实现游戏按钮 javascript/jquery
2019-6-7
-
PHP代理实现用老人机看小说 javascript/jquery
2020-6-26