1. 高阶函数
定义:
高阶函数至少满足下列一个条件
- 常见的高阶函数
1 | // Array.prototype.map 接受一个函数作为参数。 |
2. 函数组合
定义:
将多个函数组合生成一个新函数的过程
1 | function compose(g, f) { |
应用场景
- eg: 对输入进行多次格式化或者变形,得到一个新的输出
1 | // 返回string小写 |
compose
的实现
1 | function compose(...funcs) { |
3. 函数柯里化
定义
在数学和计算机中,柯里化是一种将使用多个参数的一个函数转化成一系列使用一个参数的函数的技术。
一个函数(多个参数)—> 一个函数(一个参数)
1 | const abc = function (a, b, c) { |
从上面的例子可以看出,curried
这个函数,可能会返回一个函数,可能返回一个结果。
实现
1 | function curry(fn) { |
4. 偏函数
定义
偏函数是指,固定一个函数的某些参数,返回一个更小元的函数。元的意思就是参数,如一个参数的函数也叫一元函数。
1 | function buildUri(scheme, domain, path) { |
实现
1 | function partial(fn){ |
偏函数与柯里化的区别
- 偏函数应用是固定一个函数的一个或者多个参数,并返回一个可以接收剩余参数的函数。
- 柯里化将函数转化为多个嵌套的一元函数,也就是每个函数只接受一个参数。
5. 惰性函数
定义
惰性函数是指,当第一次根据条件执行函数后,在第 2 次调用函数时,就不再检测条件,直接执行函数。
例子
- 原始写法。
1 | function addHandler(element,type,handler){ |
- 惰性函数写法 1
1 | function addHandler(element, type, handler) { |
- 惰性函数写法 2
1 | const addHandler = (function () { |
6. 缓存函数
缓存函数将函数的计结果存储起来,当下次以同样参数调用该函数时,直接返回已缓存的结果,无需再次执行函数。这是常见的一种空间换时间的优化方式。
1 | function memorized = (fn){ |