Bagaimana cara menulis ini di coffeescript?
f = (function(){
// something
})();
Terima kasih atas tipnya :)
Bagaimana cara menulis ini di coffeescript?
f = (function(){
// something
})();
Terima kasih atas tipnya :)
Jawaban:
Meskipun Anda hanya dapat menggunakan tanda kurung (misalnya (-> foo)()
, Anda dapat menghindarinya dengan menggunakan do
kata kunci:
do f = -> console.log 'this runs right away'
Penggunaan yang paling umum do
adalah menangkap variabel dalam satu lingkaran. Misalnya,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Tanpa do
, Anda hanya akan mencetak nilai x
setelah pengulangan 3 kali.
-> console.log 'this runs right away'
ke f
, lalu menjalankannya; milik Anda menjalankan fungsi dan kemudian memberikan hasilnya ke f
, seperti pada pertanyaan awal. (Meskipun dalam kasus console.log
, nilai kembaliannya selalu undefined
saja.)
{f: do -> // something}
do
juga memungkinkan Anda meneruskan argumen ke fungsi tersebut. Untuk lulus 1
dan 2
sebagai parameter x
dan y
, tulis do (x = 1, y = 2) ->
. (Dokumentasi untuk fitur ini telah hilang , tetapi masalah di mana fitur tersebut diperkenalkan memiliki beberapa contoh.)
Jika Anda ingin "membuat alias" argumen yang diteruskan ke fungsi pemanggilan mandiri di CoffeeScript, dan katakanlah inilah yang ingin Anda capai:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Maka do (window, document) ->
tidak akan membiarkan Anda melakukan itu. Cara untuk pergi adalah dengan parens maka:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Anda juga dapat menggabungkan do
kata kunci dengan parameter fungsi default untuk menyemai "fungsi yang memulai sendiri" rekursif dengan nilai awal. Contoh:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
coba gunakan
do ($ = jQuery) ->
do ->
#your stuff here
Ini akan membuat penutupan yang dijalankan sendiri, yang berguna untuk pelingkupan.
Maaf, saya menyelesaikannya:
f = (
() -> "something"
)()
do
kunci memiliki beberapa keterbatasan yang terkadang membuatnya perlu untuk menggunakan pendekatan gaya JS (lihat masalah 960 ); do
benar-benar hanya ditambahkan karena kasus penggunaan loop-with-closures.
Harus
f = () ->
# do something
f = do -> console.log x