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 do
mot - clé:
do f = -> console.log 'this runs right away'
L'utilisation la plus courante de do
est 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 x
aprè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 undefined
toute façon.)
{f: do -> // something}
do
vous permet également de passer des arguments à la fonction. Pour passer 1
et 2
comme paramètres x
et 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 do
mot - 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"
)()
do
mot-clé a certaines limitations qui rendent parfois nécessaire l'utilisation de l'approche de style JS (voir numéro 960 ); do
n'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