javascript高级函数用法

74 阅读1分钟

compose组合函数

把逻辑解耦在各个函数中,通过compose的方式组合函数,将外部数据依次通过各个函数的加工,生成结果。先执行后传入的函数。

redux源码中的中间件的处理使用的函数

function compose(...funcs) {
	if (funcs.length === 0) {
		return arg => arg;
	}

	if (funcs.length === 1) {
		return funcs[0];
	}
	
	return funcs.reduce((a, b) => (...args) => a(b(...args)));
} 

compose组合函数使用示例

let a = x => x + "。";
let b = x => x + "!";
let c = x => x + "?";
let combineFun = compose(a, b, c)
combineFun('dyx') // dyx?!。

洋葱圈模型

通过以上的组合函数使传入的中间件函数变成(...arg) => mid1(mid2(mid3(...arg))),最后执行的中间件mid3最先执行完,最先执行的mid1最后执行完,是符合洋葱圈模型的。

柯里化函数

函数使用更加灵活,可以一次传入所有参数调用也可以只传入一部分参数调用,让它返回一个函数去处理剩余的参数。

function curry(fn) {
  let judge = (...args) => {
    // 一次传递了所有参数 则直接调用
    if (args.length >= fn.length) {
      return fn(...args);
    } 
    return (...arg) => judge(...args, ...arg);
  }
  return judge;
}

function add(a, b, c) {
  return a + b + c;
}
add(1, 2, 3) // 6

const addCurry = curry(add);
console.log(addCurry(1, 2, 3)); // 6
console.log(addCurry(1)(2)(3)); // 6
console.log(addCurry(1, 2)(3)); // 6
console.log(addCurry(1)(2, 3)); // 6

高阶函数

高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。Array.prototype.map,Array.prototype.filter 和 Array.prototype.reduce 是语言中内置的一些高阶函数。

纯函数

一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。