2011-08-24 17 views
21

estoy tratando de recrear este cierre lambda jQuery popular entre los CoffeeScript:¿Cómo escribir este cierre lambda en CoffeeScript?

(function($, window, undefined){ 
    $(document).ready(function(){ 
    ... 
    }); 
})(jQuery, window); 

Hasta ahora tengo esto:

(($, window, undefined) -> 
    $ -> 
    alert "js!" 
)(jQuery, window) 

estoy recibiendo este error:

Error: Parse error on line 1: Unexpected 'BOOL'

Se parece que undefined es la causa del problema aquí. ¿Alguna idea sobre cómo solucionar esto?

Respuesta

53

undefined es una palabra clave en CoffeeScript. No es necesario que se asegure de que esté bien definido, así que puede olvidar esa parte.

CoffeeScript proporciona una palabra clave do que puede usar para crear un cierre en lugar de utilizar la sintaxis de expresión de función invocada inmediatamente.

CoffeeScript Fuente try it
do ($ = jQuery, window) -> 
    $ -> 
    alert "js!" 
Compilado JavaScript
(function($, window) { 
    return $(function() { 
    return console.log("js!"); 
    }); 
})(jQuery, window); 

La sintaxis anterior no fue apoyada hasta CoffeeScript 1.3.1. Para versión más antigua que todavía tienen que hacer esto:

CoffeeScript Fuente [try it]
(($, window) -> 
    $ -> 
    alert "js!" 
)(jQuery, window) 

Si tienes curiosidad, aquí es cómo maneja CoffeeScript undefined.

CoffeeScript Fuente [try it]
console.log undefined 
Compilado JavaScript
console.log(void 0); 

Se puede ver que no utiliza la variable undefined, sino que utiliza JavaScript's void operator para producir el valor indefinido.

13
do ($, window) -> 
    $ -> 
    alert "js!" 

compila a

(function($, window) { 
    return $(function() { 
    return alert("js!"); 
    }); 
})($, window); 
+0

Estoy buscando para obtener el 'undefined' arg en mi firma de func. Sé que esto no es crítico, pero ¿por qué no dejaré que coffeescript lo haga? – naomik

+1

porque como la otra respuesta dice coffeescript compila la palabra 'undefined' a' void 0' y no se basa en esa variable – austinbv

+0

@naomi Es una palabra clave. ¿Cuál es el propósito de tener 'undefined' en la firma de la función? CoffeeScript debería eliminar la necesidad de hacerlo. –

Cuestiones relacionadas