Jak to napisać w coffeescript?
f = (function(){
// something
})();
Dzięki za wszelkie wskazówki :)
Jak to napisać w coffeescript?
f = (function(){
// something
})();
Dzięki za wszelkie wskazówki :)
Odpowiedzi:
Chociaż możesz po prostu użyć nawiasów (np. (-> foo)()Możesz ich uniknąć, używając dosłowa kluczowego:
do f = -> console.log 'this runs right away'
Najczęstszym zastosowaniem dojest przechwytywanie zmiennych w pętli. Na przykład,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Bez tego dopo prostu wypisałbyś wartość xpo pętli 3 razy.
-> console.log 'this runs right away'do f, a następnie uruchamia go; yours uruchamia funkcję, a następnie przypisuje jej wynik f, tak jak w oryginalnym pytaniu. (Chociaż w przypadku console.logwartości zwracanej jest zawsze undefined.)
{f: do -> // something}
doUmożliwia także przekazywanie argumentów do funkcji. Aby przekazać 1i 2jako parametry xi y, napisz do (x = 1, y = 2) ->. (Dokumentacja dotycząca tej funkcji zaginęła , ale problem związany z wprowadzeniem funkcji ma kilka przykładów).
Jeśli chcesz „aliasować” argumenty przekazywane do funkcji samowywołującej się w CoffeeScript, powiedzmy, że to właśnie próbujesz osiągnąć:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Więc do (window, document) ->nie pozwolę ci tego zrobić. Droga do zrobienia to parens:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Można również połączyć dosłowo kluczowe z domyślnymi parametrami funkcji, aby zapoczątkować rekurencyjne „funkcje samoczynne” z wartością początkową. Przykład:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
Spróbuj użyć
do ($ = jQuery) ->
do ->
#your stuff here
Stworzy to samowykonujące się zamknięcie, które jest przydatne do określania zakresu.
Przepraszam, rozwiązałem to:
f = (
() -> "something"
)()
dokluczowe ma pewne ograniczenia, które powodują, że czasami konieczne jest użycie podejścia w stylu JS (patrz wydanie 960 ); dozostał dodany tylko ze względu na przypadek użycia pętli z zamknięciami.
Powinno być
f = () ->
# do something
f = do -> console.log x