Réponses:
Je pense que c'est une convention utile pour que les rappels soient le dernier argument d'une fonction. C'est généralement le cas avec l'API Node.js, par exemple. Donc, avec cela à l'esprit:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something paramCertes, cela ajoute la surcharge d'un appel de fonction supplémentaire à chaque que setTimeoutvous faites; mais dans les interpréteurs JS d'aujourd'hui, l'inconvénient des performances est insignifiant à moins que vous ne le fassiez des milliers de fois par seconde. (Et que faites-vous en définissant des milliers de délais d'attente par seconde, de toute façon?)
Bien sûr, une approche plus simple consiste à simplement nommer votre rappel, ce qui tend à produire un code plus lisible de toute façon (jashkenas est un grand fan de cet idiome):
callback = -> something param
setTimeout callback, 1000setTimeout ( ->
  something param
), 1000Les parenthèses sont facultatives, mais commencer la ligne par une virgule m'a semblé compliqué.
setTimeoutet la paren d'ouverture est important. L'espace signifie que les parenthèses entourent la fermeture comme premier paramètre de setTimeout; si c'était directement après le t, alors coffescript s'attendrait à ce que les parenthèses entourent les deux paramètres.
                    setTimeout -> 
  something param
, 1000something paramest sur la même ligne que setTimeout, il est analysé différemment.
                    Cela se traduira par une traduction à peu près équivalente (merci @Joel Mueller):
setTimeout (-> something param), 1000Notez que ce n'est pas une traduction exacte car la fonction anonyme renvoie le résultat de l'appel something(param)au lieu d'undefined, comme dans votre extrait de code.
setTimeout (() -> something param), 1000
                    Je trouve que c'est la meilleure méthode pour faire de même,
setTimeout (-> alert "hi"), 1000