如何通过Coffeescript用参数编写setTimeout


Answers:


214

我认为这是将回调作为函数的最后一个参数的有用约定。例如,Node.js API通常就是这种情况。因此请牢记:

delay = (ms, func) -> setTimeout func, ms

delay 1000, -> something param

当然,这给setTimeout您进行的每个操作都增加了额外的函数调用的开销。但是在当今的JS解释器中,除非您每秒执行数千次,否则性能的缺点是微不足道的。(无论如何,您正在设置每秒数千次超时吗?)

当然,一种更直接的方法是简单地命名您的回调,无论如何它总是会产生更具可读性的代码(jashkenas是这种习惯用法的忠实拥护者):

callback = -> something param
setTimeout callback, 1000

除非您需要嵌套的回调,否则
很棒

184
setTimeout ( ->
  something param
), 1000

括号是可选的,但以逗号开头的行对我来说似乎很混乱。


拿出锅,喝杯咖啡,〜)
比利·穆恩

4
不为我编译括号。我必须删除它们,并以逗号开头,并且它的工作原理就像是一种魅力。
杰里米·锡耶

使用括号,您还可以一行完成此操作。

1
@JeremyThille请注意,两者之间的空间setTimeout和开头的括号很重要。那里的空间意味着括号是封闭的,作为setTimeout的第一个参数。如果它紧接在t之后,则咖啡期望括号括住两个参数。
jankins's

67
setTimeout -> 
  something param
, 1000

如果您只想使用匿名函数,这是最好的方法。
Alex K

也用于命名函数setTimeout namedFunc,5000
Dirk Smaverson 2013年

请注意,空格很重要。呼叫的间隔必须完全如上所述。如果something param与处于同一行setTimeout,则解析方式不同。
henrebotha'2

46

这将导致大致等效的翻译(感谢@Joel Mueller):

setTimeout (-> something param), 1000

请注意,这不是确切的翻译,因为匿名函数返回调用的结果,something(param)而不是如代码片段中的undefined。


1
父母/分号太多!这是CoffeeScript,摆脱多余的食物是一半。setTimeout (() -> something param), 1000
Joel Mueller

尼古拉斯很好地指出,空括号也是可选的。
Joel Mueller


3

另外的选择:

setTimeout(
    -> something param
    1000
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.