函数调用的Coffeescript括号

时间:2012-03-13 22:31:16

标签: javascript syntax coffeescript

Coffeescript可以自由设置或省略函数调用的括号。像

alert 'Hi folks'
alert ('Hi folks')

是平等的。

现在我想知道,可能是由于对coffeescript的经验不足,其语法和目标是保持简单,如果有可能为下面的语句添加括号。 我知道他们没有必要

define (require) ->
   return 'goodbye'

编辑:如果我以与alert语句相同的方式应用选项来设置括号,那么我认为这种语法不会对最终的js产生任何影响。

define ((require) ->
   return 'goodbye'
)

2 个答案:

答案 0 :(得分:3)

define (require) ->
   return 'goodbye'

等同于JavaScript代码

define(function(require) { return 'goodbye' })

即,函数调用define,函数作为其第一个(也是唯一的)参数。当你提出问题时,它可能不是你所期望的片段。

当我玩CoffeeScript时,我发现非常有用的东西是在the CoffeeScript website上的在线“尝试CoffeeScript”对话中尝试一下。这允许您查看给定代码段编译到的JavaScript,并立即查看效果,例如在生成的JavaScript代码上添加括号或更改缩进。我绝对推荐这样做。 : - )

修改以反映问题中的修改:

是的,在函数((require) -> return 'goodbye')周围添加括号是有效的,并且不会改变行为。但请注意,解析器会对“foo (bar)”和“foo(bar)”进行不同的解析;在前者中,括号表示优先级(优先级,“常规括号”),在后者中它们是函数调用括号。

foo bar”,“foo(bar)”,“foo (bar)”都做同样的事情,但“foo bar, baz”和“foo(bar, baz)”工作很好,“foo (bar, baz)”是语法错误。

答案 1 :(得分:1)

是的,您可以在括号中包含匿名函数。

我运行了这个简单的脚本。

test.coffee

define = (func) -> func()

console.log define ((require) ->
   return 'goodbye'
)

输出:

goodbye