Antworten:
Ich denke, es ist eine nützliche Konvention für Rückrufe als letztes Argument für eine Funktion. Dies ist beispielsweise normalerweise bei der Node.js-API der Fall. In diesem Sinne:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Zugegeben, dies erhöht den Overhead eines zusätzlichen Funktionsaufrufs für jeden von setTimeout
Ihnen; Bei den heutigen JS-Interpreten ist der Leistungsnachteil jedoch unbedeutend, es sei denn, Sie tun dies tausende Male pro Sekunde. (Und was machst du überhaupt, wenn du Tausende von Zeitüberschreitungen pro Sekunde einstellst?)
Ein einfacherer Ansatz besteht natürlich darin, einfach Ihren Rückruf zu benennen, der ohnehin zu besser lesbarem Code führt (Jashkenas ist ein großer Fan dieser Redewendung):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Die Klammern sind optional, aber das Beginnen der Zeile mit einem Komma schien mir chaotisch.
setTimeout
und dem Eröffnungsparen wichtig ist. Das Leerzeichen dort bedeutet, dass die Klammern den Abschluss als ersten Parameter für setTimeout umgeben. Wenn es direkt nach dem t wäre, würde Coffescript erwarten, dass die Klammern beide Parameter einschließen.
setTimeout ->
something param
, 1000
something param
es sich in derselben Zeile befindet wie setTimeout
, wird es anders analysiert.
Dies führt zu einer ungefähr gleichwertigen Übersetzung (danke @Joel Mueller):
setTimeout (-> something param), 1000
Beachten Sie, dass dies keine exakte Übersetzung ist, da die anonyme Funktion das Ergebnis des Aufrufs something(param)
anstelle von undefiniert zurückgibt , wie in Ihrem Snippet.
setTimeout (() -> something param), 1000
Ich finde das die beste Methode, um dasselbe zu tun,
setTimeout (-> alert "hi"), 1000