JS中的多个连续函数和柯里化

看着redux-logger的源码,有个地方瞬间就懵逼了,连续的箭头函数,那一串啊~(据说redux-thunk的还长)

老长~

这个返回返回再返回,真是简直~

高阶函数:将函数作为参数或者返回值是函数的函数

所以,这就是高阶函数啊!

在计算机科学中,柯里化(英語:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

你看,这就是高阶函数的柯里化应用(通俗讲就是返回函数,把需要多个参数的改写成单个参数的过程)

最简单的高阶函数

1
2
3
4
5
6
7
8
9
10
let add = function (a, b) {
return function (c) {
console.log(a + b + c)
}
}

// 或者
let add = function (a, b, f) {
return f(a) + f(b)
}

柯里化

1
2
3
4
5
6
7
let add = function (a) {
return function (b) {
return function (c) {
console.log(a + b + c)
}
}
}

箭头函数实现

1
2
3
let add = a => b => c => {
console.log(a + b + c)
}

所以这么看,突然就觉得顺眼了,就像齐刘海看多了,觉得挺好看

柯里化的作用都说有3个:

  1. 参数复用
  2. 提前返回
  3. 延迟计算/运行