2013-06-13 12 views
6

Mi chiedo se esiste un modo per abbreviare la dichiarazione di funzione anonima in JavaScript attraverso l'utilizzo di preprocessore/compilatore come Google Closure. Immagino che sarebbe abbastanza pulito per i callback.Dichiarazione di funzione anonima stenografia javascript

Per esempio, normalmente mi piacerebbe scrivere un banco di prova qunit questo modo:

test("Dummy test", function(){ ok(a == b);}); 

Sto cercando una sintassi Clojure di ispirazione come segue:

test("Dummy test", #(ok a b)); 

E 'possibile?

+2

Prova CoffeeScript con le sue funzioni Accorciare via -> (http : //coffeescript.org/#literals) –

+1

OMG un'altra domanda. Dov'è stata tutta la mia vita? :) Ma al fine di esaurire tutte le opzioni, lascerò aperta la domanda per vedere se esiste un plug-in di chiusura che può svolgere lo stesso compito. Grazie comunque. –

+1

Poiché Closure utilizza un parser JavaScript reale per analizzare il suo input, penso che i plugin siano probabilmente un po 'limitati in ciò che possono ottenere. Non c'è modo di analizzare '# (ok a b)' come JavaScript. – ruakh

risposta

4

Senza preoccuparsi dei preprocessori o dei compilatori, è possibile eseguire quanto segue che riduce la sintassi di callback. Una cosa di questo è che l'ambito di "questo" non è affrontato ... ma per il vostro caso d'uso non credo che sia importante:

var ok = function(a,b) { 
    return (a==b); 
}; 

var f = function(func) { 
    var args = Array.prototype.slice.call(arguments, 1); 

    return function() { 
    return func.apply(undefined,args); 
    }; 
}; 

/* 
Here's your shorthand syntax 
*/ 
var callback = f(ok,10,10); 

console.log(callback()); 
+0

grazie per il tuo contributo –