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 doSchlüsselworts vermeiden :
do f = -> console.log 'this runs right away'
Die häufigste Verwendung doist 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 doSie nur xdreimal den Wert von nach der Schleife drucken .
-> console.log 'this runs right away'zu fund führt sie dann aus. Ihr führt die Funktion aus und weist ihr Ergebnis dann fwie in der ursprünglichen Frage zu. (Im Fall von console.logist der Rückgabewert jedoch immer undefined.)
{f: do -> // something}
dokönnen Sie auch Argumente an die Funktion übergeben. Um 1und 2als Parameter xund 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 doSchlü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"
)()
doSchlüsselwort weist einige Einschränkungen auf, die es manchmal erforderlich machen, den JS-Ansatz zu verwenden (siehe Problem 960 ). dowurde wirklich nur wegen des Anwendungsfalls "Loop-with-Closures" hinzugefügt.
Es sollte sein
f = () ->
# do something
f = do -> console.log x