Comment écrire ceci dans coffeescript?
f = (function(){
// something
})();
Merci pour tous les conseils :)
Comment écrire ceci dans coffeescript?
f = (function(){
// something
})();
Merci pour tous les conseils :)
Réponses:
Bien que vous puissiez simplement utiliser des parenthèses (par exemple (-> foo)(), vous pouvez les éviter en utilisant le domot - clé:
do f = -> console.log 'this runs right away'
L'utilisation la plus courante de doest la capture de variables dans une boucle. Par exemple,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Sans le do, vous imprimeriez simplement la valeur de xaprès la boucle 3 fois.
-> console.log 'this runs right away'à f, puis l'exécute; le vôtre exécute la fonction puis affecte son résultat à f, comme dans la question d'origine. (Bien que dans le cas de console.log, la valeur de retour est toujours de undefinedtoute façon.)
{f: do -> // something}
dovous permet également de passer des arguments à la fonction. Pour passer 1et 2comme paramètres xet y, écrivez do (x = 1, y = 2) ->. (La documentation de cette fonctionnalité s'est perdue , mais le problème où la fonctionnalité a été introduite a quelques exemples.)
Si vous voulez "aliaser" les arguments passés à la fonction auto-appelante dans CoffeeScript, et disons que c'est ce que vous essayez de réaliser:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Alors do (window, document) ->ne vous laissera pas faire ça. La voie à suivre est alors avec les parents:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Vous pouvez également combiner le domot - clé avec des paramètres de fonction par défaut pour amorcer des «fonctions auto-initiées» récursives avec une valeur initiale. Exemple:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
Essayez d'utiliser
do ($ = jQuery) ->
do ->
#your stuff here
Cela créera une fermeture auto-exécutable, ce qui est utile pour la portée.
Toutes mes excuses, je l'ai résolu:
f = (
() -> "something"
)()
domot-clé a certaines limitations qui rendent parfois nécessaire l'utilisation de l'approche de style JS (voir numéro 960 ); don'a été vraiment ajouté qu'à cause du cas d'utilisation de la boucle avec fermetures.
Ça devrait être
f = () ->
# do something
f = do -> console.log x