Pen-Pineapple-Apple-pen!

上帝花了六天时间创造了世界,第七天创造了 ppap 函数:

const ppap = (a, b) => () => `${a()}-${b()}`

聪明的你如果知道 ECMAScript 中的 Arrow function 和 String template 一定能看懂这个函数的定义。

讲到这里你可能一脸懵逼,这么一个普通的函数,为什么上帝要花一天的时间来创造?

举个简单的例子,有一群有知识的人写了一个函数:

const pen = () => 'Pen'

没错,他们每次调用这个函数就能获得一支 Pen,当然 Pen 的用途太多就不一一赘述了。

而世界的另一头又有人创造了另一个美丽的函数(什么,你居然觉得它跟 pen 是一样的?!):

const apple = () => 'Apple'

这时候上帝花了一天时间创造的函数总算可以闪亮登场了:

ppap(pen, apple)();

Yes, you have a "Pen-Apple" now!

聪明的你一定已经知道如何去正确使用上帝的伟大创造了:

const pineapple = () => 'pineapple'

ppap(pineapple, pen)();

Yes, you have a "pineapple-Pen" now!

以此类推可以解锁更为稀有的 Apple-pen-Pineapple-pen, Pen-Pineapple-Apple-pen 以及 Pen-Pineapple-Apple-pen!

--

今天讲的是 Higher-order Function,即「高阶函数」。

Pen-Pineapple-Apple-pen!_第1张图片
FP Series

在数学与计算机科学中,所谓「高阶函数」就是:

  • 把函数作为其参数传入
  • 返回值为一个函数

Have Fun!

你可能感兴趣的:(Pen-Pineapple-Apple-pen!)