Wie schreibe ich das in Coffeescript?
f = (function(){
// something
})();
Danke für alle Tipps :)
Wie schreibe ich das in Coffeescript?
f = (function(){
// something
})();
Danke für alle Tipps :)
Antworten:
Sie können zwar nur Klammern verwenden (z. B. (-> foo)()
können Sie diese mithilfe des do
Schlüsselworts vermeiden :
do f = -> console.log 'this runs right away'
Die häufigste Verwendung do
ist das Erfassen von Variablen in einer Schleife. Zum Beispiel,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Ohne das würden do
Sie nur x
dreimal den Wert von nach der Schleife drucken .
-> console.log 'this runs right away'
zu f
und führt sie dann aus. Ihr führt die Funktion aus und weist ihr Ergebnis dann f
wie in der ursprünglichen Frage zu. (Im Fall von console.log
ist der Rückgabewert jedoch immer undefined
.)
{f: do -> // something}
do
können Sie auch Argumente an die Funktion übergeben. Um 1
und 2
als Parameter x
und zu übergeben y
, schreiben Sie do (x = 1, y = 2) ->
. (Die Dokumentation für diese Funktion ist verloren gegangen , aber das Problem, bei dem die Funktion eingeführt wurde, enthält einige Beispiele.)
Wenn Sie die Argumente, die an die selbstaufrufende Funktion in CoffeeScript übergeben werden, "aliasen" möchten, und sagen wir, dies ist das, was Sie erreichen möchten:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Dann do (window, document) ->
lass dich das nicht tun. Der Weg ist dann mit den Eltern:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Sie können das do
Schlüsselwort auch mit Standardfunktionsparametern kombinieren, um rekursive "selbstinitiierende Funktionen" mit einem Anfangswert zu setzen. Beispiel:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
versuchen zu benutzen
do ($ = jQuery) ->
do ->
#your stuff here
Dadurch wird ein selbstausführender Abschluss erstellt, der für das Scoping nützlich ist.
Entschuldigung, ich habe es gelöst:
f = (
() -> "something"
)()
do
Schlüsselwort weist einige Einschränkungen auf, die es manchmal erforderlich machen, den JS-Ansatz zu verwenden (siehe Problem 960 ). do
wurde wirklich nur wegen des Anwendungsfalls "Loop-with-Closures" hinzugefügt.
Es sollte sein
f = () ->
# do something
f = do -> console.log x