为什么有两种方法可以合理地定义函数, 它们究竟有什么不同(都编译成相同的JavaScript)
let f1 = fun (a) => 123;
let f2 a => 123;
答案 0 :(得分: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 ...
,因为函数只是另一个值。