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 do
słowa kluczowego:
do f = -> console.log 'this runs right away'
Najczęstszym zastosowaniem do
jest przechwytywanie zmiennych w pętli. Na przykład,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Bez tego do
po prostu wypisałbyś wartość x
po 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.log
wartości zwracanej jest zawsze undefined
.)
{f: do -> // something}
do
Umożliwia także przekazywanie argumentów do funkcji. Aby przekazać 1
i 2
jako parametry x
i 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ć do
sł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"
)()
do
kluczowe ma pewne ograniczenia, które powodują, że czasami konieczne jest użycie podejścia w stylu JS (patrz wydanie 960 ); do
został dodany tylko ze względu na przypadek użycia pętli z zamknięciami.
Powinno być
f = () ->
# do something
f = do -> console.log x