Currying
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数
示例
1 | function check(reg, txt) { |
- 优缺点
- 参数复用
- 提前确定执行函数
- 延迟计算,惰性求值
- 性能
存取 arguments 对象通常比存取命名参数慢
老版本浏览器 arguments.length 实现上相当慢
fn.apply()、fn.call() 比直接调用 fn()慢
大量嵌套作用域和闭包性能损耗
1 | function curry (fn, currArgs) { |
Array.prototype.slice.call(arguments)
把 arguments 转化成数组
反柯里化
一个泛型化的过程。它使得被反柯里化的函数,可以接收更多参数。
1 | function Toast(option){ |
实现方式
1 | Function.prototype.unCurrying = function(){ |
事件监听 柯里化
1 | function nodeListen(node, eventName){ |
部分应用
部分应用函数是将一个函数转化为具有更少的元素(即更少的参数)的函数。