javascript - react - Sintaxis de funciones anónimas en CoffeeScript
node js (3)
He estado buscando en CoffeeScript y no entiendo cómo escribiría un código como este. ¿Cómo maneja las funciones anónimas anidadas en su sintaxis?
;(function($) {
var app = $.sammy(function() {
this.get(''#/'', function() {
$(''#main'').text('''');
});
this.get(''#/test'', function() {
$(''#main'').text(''Hello World'');
});
});
$(function() {
app.run()
});
})(jQuery);
En realidad no lo compilé, pero esto debería funcionar
(($) ->
app = $.sammy ->
this.get ''#/'', ->
$(''#main'').text ''''
this.get ''#/test'', ->
$(''#main'').text ''Hello World''
$(->
app.run()
)
)(jQuery);
La respuesta de Matt es correcta, pero aquí hay un método alternativo:
En CoffeeScript 1.0 (lanzado unas semanas después de plantear esta pregunta), se introdujo un operador do
que ejecuta la función que lo sigue inmediatamente. Se utiliza principalmente para capturar variables en bucles, ya que
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(que pasa una referencia a x
en la función anónima) se comporta de manera diferente a
for x in arr
setTimeout (-> console.log x), 50
Este último simplemente emitirá la última entrada en arr
repetidamente, ya que solo hay una x
.
De todos modos, deberías saber do
como una forma de ejecutar una función anónima sin paréntesis adicionales, aunque sus capacidades con respecto al paso de argumentos son un poco limitadas en este momento. He planteado una propuesta para ampliarlos .
Actualmente, el equivalente de su ejemplo de código sería
do ->
$ = jQuery
...
Si mi propuesta es aceptada, será posible escribir.
do ($ = jQuery) ->
...
en lugar.
Variante corta
do ($=jQuery)->
app = $.sammy ->
@get ''#/'', -> $("#main").text ''''
@get ''#/test'', -> $(''#main'').text ''Hello world''
$ -> app.run()