上帝花了六天时间创造了世界,第七天创造了 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,即「高阶函数」。
在数学与计算机科学中,所谓「高阶函数」就是:
- 把函数作为其参数传入
- 返回值为一个函数
Have Fun!