Відповіді:
Я думаю, що це корисна умова для зворотних викликів, які стають останнім аргументом функції. Як правило, це стосується, наприклад, API Node.js. Отже, маючи це на увазі:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Зрозуміло, це додає накладні витрати додаткового виклику функції кожному setTimeout
; але в сучасних перекладачах JS недолік продуктивності є незначним, якщо ви не робите це тисячі разів за секунду. (І що ви все робите, встановлюючи тисячі тайм-аутів в секунду?)
Звичайно, більш простий підхід полягає в тому, щоб просто назвати зворотний дзвінок, який, як правило, створює більше читабельного коду (яшкенас є великим шанувальником цієї ідіоми):
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