Yanıtlar:
Bence geri çağrıların bir işleve son argüman olarak gelmesi faydalı bir kural. Bu genellikle örneğin Node.js API'sinde geçerlidir. Bunu akılda tutarak:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Bu, setTimeout
yaptığınız her işleve ekstra bir işlev çağrısının ek yükünü ekler ; ancak günümüzün JS yorumlayıcılarında, saniyede binlerce kez yapmadığınız sürece performans dezavantajı önemsizdir. (Her neyse, saniyede binlerce zaman aşımı ayarlamak ne yapıyorsunuz?)
Tabii ki, daha basit bir yaklaşım, zaten daha okunabilir kod üretme eğiliminde olan geri aramanızı adlandırmaktır (jashkenas bu deyimin büyük bir hayranıdır):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Parantezler isteğe bağlıdır, ancak çizgiyi virgülle başlatmak benim için dağınık görünüyordu.
setTimeout
ve açılış pareninin önemli olduğunu unutmayın . Buradaki boşluk parantezlerin setTimeout için ilk parametre olarak kapatmayı çevrelediği anlamına gelir; t'den hemen sonra olsaydı, tabut parantezin her iki parametreyi de kapsamasını beklerdi.
setTimeout ->
something param
, 1000
something param
aynı hat üzerindedir setTimeout
o farklı çözümlenen alır.
Bu kabaca eşdeğer bir çeviri ile sonuçlanacaktır (teşekkürler @Joel Mueller):
setTimeout (-> something param), 1000
Bunun tam bir çeviri olmadığına dikkat edin, çünkü anonim işlev something(param)
snippet'inizde olduğu gibi tanımsız yerine çağrı sonucunu döndürür .
setTimeout (() -> something param), 1000
Bunu aynı şeyi yapmanın en iyi yolu olarak görüyorum,
setTimeout (-> alert "hi"), 1000