Bunu kahve kağıdına nasıl yazabilirim?
f = (function(){
// something
})();
Herhangi bir ipucu için teşekkürler :)
Bunu kahve kağıdına nasıl yazabilirim?
f = (function(){
// something
})();
Herhangi bir ipucu için teşekkürler :)
Yanıtlar:
Parantez kullanabilirsiniz (örneğin (-> foo)()
, do
anahtar kelimeyi kullanarak bunlardan kaçınabilirsiniz :
do f = -> console.log 'this runs right away'
En yaygın kullanım, do
bir döngüdeki değişkenleri yakalamaktır. Örneğin,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Bu olmadan, döngüden sonraki do
değeri x
3 kez yazdırırsınız .
-> console.log 'this runs right away'
etmek f
sonra çalışır; sizinki işlevi çalıştırır ve ardından sonucunu f
, orijinal soruda olduğu gibi atar . (Yine de, console.log
dönüş değeri her zaman undefined
zaten olur.)
{f: do -> // something}
do
işleve argümanlar iletmenize de izin veriyor. Geçmek için 1
ve 2
parametreler olarak x
ve y
yazın do (x = 1, y = 2) ->
. (Bu özelliğin belgeleri kayboldu , ancak özelliğin sunulduğu sorunun bazı örnekleri var.)
CoffeeScript'te kendi kendini çağıran işleve aktarılan argümanları "takma" olarak adlandırmak istiyorsanız ve bunu başarmaya çalıştığınız şey diyelim:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
O do (window, document) ->
zaman bunu yapmana izin vermeyeceğim. Gitmenin yolu parantez kullanmaktır o zaman:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
do
Özyinelemeli "kendi kendine başlatan işlevleri" bir başlangıç değeriyle tohumlamak için anahtar sözcüğü varsayılan işlev parametreleriyle birleştirebilirsiniz . Misal:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
kullanmaya çalışmak
do ($ = jQuery) ->
do ->
#your stuff here
Bu, kapsam belirleme için yararlı olan, kendi kendine çalışan bir kapanma yaratacaktır.
Özür dilerim, çözdüm:
f = (
() -> "something"
)()
do
Anahtar kelime gerekli, bazen JS tarzı bir yaklaşım kullanmak yapan bazı sınırlamaları vardır (bkz sorunu 960 ); do
gerçekten yalnızca kapanan döngü kullanım durumu nedeniyle eklendi.
Olmalı
f = () ->
# do something
f = do -> console.log x