2011-08-24 17 views
21

Sto cercando di ricreare questo popolare chiusura lambda jQuery con CoffeeScript:Come scrivere questa chiusura lambda in CoffeeScript?

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

Finora ho questo:

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

sto ottenendo questo errore:

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

E ' sembra che undefined sia la causa del problema qui. Qualche idea su come aggirare questo?

risposta

53

undefined è una parola chiave in CoffeeScript. Non è necessario assicurarsi che sia definito correttamente, in modo da poter dimenticare quella parte.

CoffeeScript fornisce una parola chiave do che è possibile utilizzare per creare una chiusura anziché utilizzare la sintassi di espressione di funzione immediatamente richiamata.

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

La sintassi di cui sopra non è stato sostenuto fino CoffeeScript 1.3.1. Per la versione più vecchia è ancora necessario fare questo:

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

Se siete curiosi, ecco come CoffeeScript gestisce undefined.

CoffeeScript Fonte [try it]
console.log undefined 
Compilato JavaScript
console.log(void 0); 

Si può vedere che non utilizza la variabile undefined, ma utilizza invece JavaScript's void operator per produrre il valore indefinito.

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

compila per

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

Sto cercando di ottenere l'argomento 'indefinito 'nella mia firma di funzione. So che questo non è fondamentale, ma perché il coffeescript non me lo consente? – naomik

+1

perché come l'altra risposta dice coffeescript compila la parola 'undefined' a' void 0' e non si basa su quella variabile – austinbv

+0

@naomi È una parola chiave. Qual è lo scopo di avere "non definito" nella firma della funzione? CoffeeScript dovrebbe eliminare la necessità di farlo. –

Problemi correlati