2016-01-10 75 views
3

我正在閱讀Node.js和Express中的一本書,其中一個示例顯示了一個帶有兩組括號的函數調用。我希望能解釋一下代碼的工作原理,因爲我之前沒有見過這個。下面的代碼:JavaScript函數調用中的兩組括號?

app.use(require('cookie-parser')(credentials.cookieSecret)); 

再次,這是困惑我的部分,這似乎是通過「credentials.cookieSecret」爲參數的第二組parans的,但什麼?它看起來類似於IIFE,但我不是。

謝謝。

+3

由於'要求( 'cookie的解析器')'返回'function'。完整的函數聲明位於https://github.com/expressjs/cookie-parser#cookieparsersecret-options – haim770

+0

@ haim770上。謝謝。感謝幫助。 –

回答

2

cookie-parser模塊返回一個函數,該函數在您共享的代碼中調用。

app.use(require('cookie-parser')(credentials.cookieSecret)); 

可以被重寫爲:

var cookieParser = require('cookie-parser') 

var cookieParserInstance = cookieParser(credentials.cookieSecret) 

app.use(cookieParserInstance) 
1

如果函數返回另一個函數,會發生這種情況。

這裏的示例:

var increment = function(base){ 
    return function(adding){ 
     return base + adding; 
    }; 
} 

var sum = increment(2)(3); // sum = 5 

var setBase = increment(2); // setBase = function(adding){ return 2 + adding; } 
var sum = setBase(3); 
1

require('cookie-parser')也是一個函數。因此,可以用credentials.cookiesSecret再次調用它。

這個用法對你來說可能很奇怪,但這很自然。

請看下面的代碼

var adder = function(a) { 
    return function(b) { return a + b; } 
} 

adder(3)(4) == 7 

在下面的鏈接,你可以檢查cookieParser是返回另一個函數的函數。 https://github.com/expressjs/cookie-parser/blob/master/index.js