摘要:冴羽的博客学习函数柯里化Currying
柯里化
柯里化 Currying 是把接受多个参数的函数转换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术
通俗的讲就是将使用多个参数的函数转换成一系列使用一个参数的函数
注意两点特征:
1.接受单一参数
2.返回函数
1 | function add(a, b) { |
第一版
注意参数的处理:柯里化要使用闭包将所有参数集中后一起处理
1 | function curry(fn) { |
第二版
1 | function sub_curry(fn) { |
分析一下:执行fn(1)时,1 < 3为true返回
1 | curry(sub_curry.apply(this,[fn, 1]), 2) |
执行fn(1)(2)时,1 < 2为true返回
1 | curry(function(){ |
执行fn(1)(2)(3)是,1 < 1为false返回
1 | (function(){ |
由此可见:每次执行 curry 都相当于在原来的 fn 外面添加一层立即执行函数,并传递参数绑定 this
简单版
1 | function curry(fn, args) { |
高颜值版
1 | // 传函数时不能传递其他参数 |
第三版
如果不想按照顺序传递参数,创建一个占位符可以改变传参顺序
1 | function curry(fn, args, holes) { |