回答:
関数の最後の引数としてコールバックを使用するのは便利な規則だと思います。これは通常、たとえばNode.js APIの場合です。それを念頭に置いて:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
確かに、これはsetTimeout
あなたが行うすべてに余分な関数呼び出しのオーバーヘッドを追加します。しかし、今日のJSインタープリターでは、毎秒数千回実行しない限り、パフォーマンス上の問題はほとんどありません。(とにかく、毎秒数千のタイムアウトを設定して何をしていますか?)
もちろん、より簡単な方法は、単にコールバックに名前を付けることです。これはとにかく読みやすいコードを生成する傾向があります(jashkenasはこのイディオムの大ファンです)。
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
括弧はオプションですが、コンマで行を始めるのは面倒に思えました。
setTimeout
が重要であることに注意してください。そこのスペースは、括弧がsetTimeoutへの最初のパラメーターとしてクロージャーを囲んでいることを意味します。それがtの直後にある場合、coffescriptは括弧が両方のパラメーターを囲むことを期待します。
setTimeout ->
something param
, 1000
something param
同じ行にあるsetTimeout
それは、異なる解析されます。
これはほぼ同等の翻訳になります(@Joel Muellerに感謝):
setTimeout (-> something param), 1000
匿名関数はsomething(param)
スニペットのように未定義ではなく呼び出しの結果を返すため、これは正確な変換ではないことに注意してください。
setTimeout (() -> something param), 1000
私はこれが同じことをする最良の方法だと思います、
setTimeout (-> alert "hi"), 1000