为什么CoffeeScript在地图后需要空白?

del*_*ber 5 coffeescript

这段代码

nums = [1..10].map (i) -> i*2
Run Code Online (Sandbox Code Playgroud)

运行

而这一点

nums = [1..10].map(i) -> i*2
Run Code Online (Sandbox Code Playgroud)

被打破

Pet*_* BD 6

原因是函数调用(调用)的括号是可选的.我发现这在我自己的代码中始终存在混淆,并且总体上包含括号的一般策略以使其清楚.

在咖啡脚本中,如果省略括号,则假定参数列表到达行尾.您的第一个示例咖啡脚本实际上与此相同:

nums = [1..10].map((i) -> i*2)
Run Code Online (Sandbox Code Playgroud)

其中map的调用的第一个参数是一个函数 (i)->i*2

如果你删除地图和(i)之间的空格,那么咖啡脚本意味着围绕其余部分的括号.你的第二个示例咖啡脚本实际上与此相同:

nums = [1..10].map(i)(-> i*2)
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到正在调用map i作为唯一参数,然后coffee脚本期望map(i)调用返回一个函数,然后该函数被称为传递->i*2或更明确地()->i*2作为参数.

鉴于咖啡脚本旨在消除javascript的潜在编码危害,我认为如果他们没有包含这个隐含的括号,它会更安全.