2015-12-05 13 views
5

Nie wiem, jak wywołać/ułożyć to pytanie, ale czy ktoś może mi wyjaśnić, co robi poniższy kod?function()() in javascript

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

ja widząc second() z app podjęcia, co to robić? https://github.com/couchbaselabs/restful-angularjs-nodejs/blob/master/app.js

Ku mojemu zaskoczeniu, w powyższym kodzie zmienne trasy nie są w ogóle używane w app.js? jaki jest cel. Jestem bardzo zdezorientowany, czy tutaj robię coś magicznego?

+2

(1) Plik routes.js eksportuje funkcję, dzięki czemu jest natychmiast wywoływana, a wynik zapisywany w 'trasach'. (2) W tym wywołaniu 'aplikacja' jest przekazywana do routera, więc aplikacja faktycznie korzysta z routera, a nie z zmiennej' routes'. –

+0

@HunanRostomyan: app.use ("/", require ("./ routes")); czy ten kod jest odpowiednikiem powyższego kodu? – ShankarGuru

+0

To może zadziałać. Nie jestem pewny. Spróbuj. –

Odpowiedz

6

Konstrukt

foo()(); 

spodziewa się, że foo() zwraca funkcję i nazywa ją natychmiast. Jest to równoznaczne z tym bardziej czytelny:

var func = foo(); 
func(); 

Podobna konstrukcja będziesz często widzę to:

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

ten definiuje funkcję i nazywa ją natychmiast. Głównym zastosowaniem jest emulacja zakresu bloków dla zmiennych.

+0

Czy możesz po prostu zrobić małe skrzypce z podstawowym przykładem na foo() (arg)? – ShankarGuru

Powiązane problemy