Coffeescript可以自由设置或省略函数调用的括号。像
alert 'Hi folks'
alert ('Hi folks')
是平等的。
现在我想知道,可能是由于对coffeescript的经验不足,其语法和目标是保持简单,如果有可能为下面的语句添加括号。 我知道他们没有必要。
define (require) ->
return 'goodbye'
编辑:如果我以与alert语句相同的方式应用选项来设置括号,那么我认为这种语法不会对最终的js产生任何影响。
define ((require) ->
return 'goodbye'
)
答案 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