Jawaban:
Saya pikir ini adalah konvensi yang berguna untuk callback yang akan datang sebagai argumen terakhir untuk suatu fungsi. Ini biasanya terjadi dengan API Node.js, misalnya. Maka dengan itu dalam pikiran:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Memang, ini menambahkan overhead panggilan fungsi ekstra untuk setiap yang setTimeout
Anda lakukan; tetapi dalam penerjemah JS hari ini, kelemahan kinerja tidak signifikan kecuali Anda melakukannya ribuan kali per detik. (Lagi pula, apa yang Anda lakukan dengan menetapkan batas waktu mati per detik?)
Tentu saja, pendekatan yang lebih mudah adalah dengan menyebut nama panggilan balik Anda, yang cenderung menghasilkan kode yang lebih mudah dibaca (jashkenas adalah penggemar berat idiom ini):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Tanda kurung adalah opsional, tetapi memulai baris dengan koma tampak berantakan bagi saya.
setTimeout
dan paren pembuka penting. Ruang di sana berarti tanda kurung mengelilingi penutupan sebagai parameter pertama ke setTimeout; jika langsung setelah t maka coffescript akan mengharapkan tanda kurung untuk melampirkan kedua parameter.
setTimeout ->
something param
, 1000
something param
berada pada baris yang sama dengan setTimeout
, ia akan diuraikan secara berbeda.
Ini akan menghasilkan terjemahan yang kurang lebih setara (terima kasih @ Joel Mueller):
setTimeout (-> something param), 1000
Perhatikan bahwa ini bukan terjemahan yang tepat karena fungsi anonim mengembalikan hasil panggilan something(param)
alih-alih tidak ditentukan, seperti dalam cuplikan Anda.
setTimeout (() -> something param), 1000
Saya menemukan ini metode terbaik untuk melakukan hal yang sama,
setTimeout (-> alert "hi"), 1000