0

为什么有两种方法可以合理地定义一个函数,它们到底有什么不同(都编译成相同的 JavaScript)

let f1 = fun (a) => 123;
let f2 a => 123;

试试这个片段

4

1 回答 1

4

实际上有三种函数定义形式:

let f = fun a => fun b => a + b;
let f = fun a b => a + b;
let f a b => a + b;

后两种形式实际上只是第一种形式的糖,称为柯里化形式,并且是函数式编程中非常方便的功能,因为它通过部分应用参数来简化函数组合。但是除非我们用一些糖来掩盖它,否则它就不那么方便了,因此是第二种形式。

但是为什么不跳过第二种形式直接进入第三种呢?嗯,第二种形式有点“意外”。它自然来自其他两个特性: 1. 因为函数是一等的,这意味着它们可以匿名定义并像任何其他值一样传递。2. 因为我们可以将变量绑定到名称。所以就像我们可以说的那样let x = 2;,我们可以说let f = fun ...,因为函数只是另一个值。

于 2017-10-09T11:48:45.907 回答