2011-06-23 12 views
195

下記のjavascriptをcoffeescriptに書き込む方法を教えてください。coffeescriptでparamsを使用してsetTimeoutを書き込む方法

setTimeout(function(){ 
    something(param); 
}, 1000); 
+1

私は正確に私が探していたものではなく、答えが正しい方向に私を導きます。 – MikeScott8

+1

これは大きな質問です。それは私がCoffeescriptの限界を発見する手助けをしているいくつかのうちの1つです(今のように)。 – thure

+0

これに.call( 'hello')を追加するにはどうすればいいですか – Atul

答えて

205

コールバックが関数の最後の引数になるのは便利な規則です。これは、通常、たとえばNode.js APIの場合です。だから、このことを念頭に置いて:

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

delay 1000, -> something param 

、これはあなたが作るすべてのsetTimeoutに余分な関数呼び出しのオーバーヘッドを追加します。今日のJSインタプリタでは、1秒間に数千回実行しない限り、パフォーマンスの欠点は重要ではありません。

もちろん、より簡単なアプローチは、コールバックの名前を付けることです(これは、とにかく可読性の高いコードを生成する傾向があります(jashkenasはこれの大きなファンです)。イディオム):

callback = -> something param 
setTimeout callback, 1000 
+0

ネストされたコールバックを必要としない限り素晴らしい –

+0

Nice answer !!!! –

44

これは、ほぼ同等の翻訳(感謝@Joelミューラー)になります:匿名関数はsomething(param)を呼び出す代わりに結果を返すため、これは正確な翻訳ではないことを

setTimeout (-> something param), 1000 

注意あなたのスニペットのように未定義です。

+1

括弧/セミコロンが多すぎます!これはCoffeeScriptで、余分な括弧を取り除くことが半分のポイントです。 'setTimeout(() - > something param)、1000' –

+0

@Joel Mueller:ありがとう、私は私の答えを更新しました。 – maerics

+0

Nicholasは、空の括弧もオプションであるという良い点を作っています。 –

174
setTimeout (-> 
    something param 
), 1000 

括弧はオプションですが、コンマで行を開始するのは面倒です。

+0

ありがとうございます。コードがとてもきれいなので、Coffeescriptは私をねじ込むことがあります。 – tomodian

+0

括弧を取り出してコーヒーを1杯持ってください〜) –

+20

それはあなたがねじを締めてもきれいではありません。ちょうどスティーン:) – Kevin

60
setTimeout -> 
    something param 
, 1000 
+0

これは、無名関数を使用したい場合に最適です。 –

+0

名前付き関数の場合も、setTimeout namedFunc、5000 –

+0

空白は重要であることに注意してください。コールは、上記のように正確に配置する必要があります。 'something param'が' setTimeout'と同じ行にある場合、それは異なって解析されます。 – henrebotha

3

別のオプション:

setTimeout(
    -> something param 
    1000 
) 
12

私はこれを同じに行うための最善の方法を見つける、

setTimeout (-> alert "hi"), 1000 
+0

このインラインスクリプトが好きです –

関連する問題