第1页 全书笔记
- 章节名:全书笔记
- 页码:第1页
1. `push` 不可链式调用的问题解决: return _.chain(errs).push(check.message).value(); => errs.push(check.message); return errs; 2. Higher-order functions
3. curry, partial 都是利用函数参数(闭包)缓存参数列表 curry 是每一个参数一个函数,一些 fpl 原生支持 partial 可以一次多个
function curry1(a) { return curry2(b) { return curry3(c) { return a(a, b, c) } } } function partial1(a, b) { return parial2(c) { return f(a, b, c) } }更通用的实现是 _.partial Function.prototype.bind 是 partial 的实现, _.bind, _.partial 支持 4. Tail recursive 就是从 recursive 顺序的尾部开始,每次执行后都把结果作为参数塞入上次 5. 递归函数可以是单个出现,也可以是有一个入口来载入递归函数,这个入口可以做一些参数初始化、参数规范化的处理。 6. 这代码可读性呵呵
function visit(mapFun, resultFun, array) { if (_.isArray(array)) return resultFun(_.map(array, mapFun)); else return resultFun(array); }// result 接受 _.map(mapFun) 或着 array 的结果,能同时处理 array 和 非array,当然也可以是只处理其中一个,另一个直接返回
function postDepth(fun, ary) { return visit(partial1(postDepth, fun), fun, ary); } function preDepth(fun, ary) { return visit(partial1(preDepth, fun), fun, fun(ary)); }这里 postDepth/preDepth 与 visit 是 mutually recursive 的关系(相互递归) 相互递归的点:两个函数都接受函数参数... 7. generator generator.head() 返回实际值 generator.tail() 返回下一个 generator 8. Pure function, Purity 相同的输入得到相同的输出,执行次数不影响输出 与函数式中的幂等 (idempotence) 不同,函数式的幂等是对一个参数连续执行两侧某函数得到的结果不变。类比 Restful 的一个解释就是同一个数据连续处理多次。因此 dempotence 的要求比 purity 更严。 9. Immutability (不可变物件) 比如 String,Number。 对函数言,就是操作不修改原数据。
说明 · · · · · ·
表示其中内容是对原文的摘抄