两种定义函数的方法

时间:2017-10-08 20:39:51

标签: function syntax reason

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

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

try this snippet

1 个答案:

答案 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 ...,因为函数只是另一个值。