2015-12-05 10 views
5

Non so come chiamare/inquadrare questo titolo della domanda, ma qualcuno può spiegarmi cosa fa il codice qui sotto?function()() in javascript

var routes = require("./routes/routes.js")(app); 

sto vedendo un second() con App essere passato, che cosa fare? https://github.com/couchbaselabs/restful-angularjs-nodejs/blob/master/app.js

Con mia sorpresa, nel codice sopra le rotte variabili non sono affatto utilizzate in app.js? qual è lo scopo. Sono abbastanza confuso, qui fa (app) argument fare qualcosa di magico qui?

+2

(1) Il file routes.js esporta una funzione in modo che sia richiamata immediatamente e il risultato memorizzato in 'routes'. (2) In questa chiamata, l'app viene passata al router, quindi l'app utilizza effettivamente il router, ma non la variabile 'routes'. –

+0

@HunanRostomyan: app.use ("/", require ("./ routes")); questo codice è equivalente al codice precedente? – ShankarGuru

+0

Potrebbe funzionare. Non ne sono sicuro. Provaci. –

risposta

6

Il costrutto

foo()(); 

aspetta che foo() restituisce una funzione e chiama immediatamente. E 'equivalente al più leggibile:

var func = foo(); 
func(); 

Un costrutto simile vedrete spesso è:

(function() { 
    // function definition 
})(args); 

Questa definisce una funzione e chiede immediatamente. L'uso principale è quello di emulare l'ambito dei blocchi per le variabili.

+0

Puoi semplicemente fare un piccolo violino con un esempio di base su foo() (arg)? – ShankarGuru

Problemi correlati