Les fonctions anonymes syntaxe dans CoffeeScript
-
09-10-2019 - |
Question
J'ai regardé CoffeeScript et je ne comprends pas comment vous écrire du code comme celui-ci. Comment sont gérés imbriquée fonctions anonymes dans sa syntaxe?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
La solution
ne compile pas réellement, mais cela devrait fonctionner
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Autres conseils
La réponse de Matt est correct, mais voici une autre méthode:
Dans CoffeeScript 1.0 (publié quelques semaines après cette question a été posée), un opérateur de do
a été introduit qui exécute la fonction qui suit immédiatement. Il est surtout utilisé pour capturer les variables dans les boucles, puisque
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(qui passe d'une référence à x
dans la fonction anonyme) se comporte différemment
for x in arr
setTimeout (-> console.log x), 50
Cette dernière sera tout simplement la sortie de la dernière entrée dans arr
à plusieurs reprises, car il n'y a qu'une seule x
.
Quoi qu'il en soit, vous devez être conscient de do
comme un moyen d'exécution d'une fonction anonyme sans les parenthèses supplémentaires, mais sont un peu limité au moment de ses capacités en ce qui concerne à passer des arguments. J'ai soulevé une proposition les élargir .
À l'heure actuelle, l'équivalent de votre exemple de code serait
do ->
$ = jQuery
...
Si ma proposition est acceptée, il sera possible d'écrire
do ($ = jQuery) ->
...
au lieu.
variante courte
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()