【发布时间】:2011-09-21 12:35:21
【问题描述】:
请告诉我如何在下面的coffeescript中编写javascript。
setTimeout(function(){
something(param);
}, 1000);
【问题讨论】:
-
我们如何添加 .call('hello') 到这个
标签: javascript settimeout coffeescript
请告诉我如何在下面的coffeescript中编写javascript。
setTimeout(function(){
something(param);
}, 1000);
【问题讨论】:
标签: javascript settimeout coffeescript
setTimeout ->
something param
, 1000
【讨论】:
something param 与setTimeout 在同一行,则解析方式不同。
我发现这是最好的方法,
setTimeout (-> alert "hi"), 1000
【讨论】:
setTimeout ( ->
something param
), 1000
括号是可选的,但以逗号开头的行对我来说似乎很乱。
【讨论】:
setTimeout 和开头括号之间的空格很重要。那里的空格表示括号围绕闭包作为 setTimeout 的第一个参数;如果它直接在 t 之后,那么 coffescript 会期望括号将两个参数括起来。
另一种选择:
setTimeout(
-> something param
1000
)
【讨论】:
我认为回调作为函数的最后一个参数是一个有用的约定。例如,Node.js API 通常就是这种情况。所以考虑到这一点:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
当然,这增加了对每个 setTimeout 进行的额外函数调用的开销;但是在今天的 JS 解释器中,性能缺陷是微不足道的,除非您每秒执行数千次。 (无论如何,你在做什么设置每秒数千次超时?)
当然,更直接的方法是简单地命名你的回调,这往往会产生更易读的代码(jashkenas 是这个成语的忠实粉丝):
callback = -> something param
setTimeout callback, 1000
【讨论】:
这将产生大致相同的翻译(感谢@Joel Mueller):
setTimeout (-> something param), 1000
请注意,这不是精确的翻译,因为匿名函数返回调用 something(param) 的结果,而不是像您的 sn-p 中的未定义。
【讨论】:
setTimeout (() -> something param), 1000