我正在阅读一本关于Node.js和Express的书籍,在其中一个示例中,有一个带有两组括号的函数调用。由于以前没有见过这种情况,所以我希望对代码进行解释。下面是代码:
app.use(require('cookie-parser')(credentials.cookieSecret));
我感到困惑的是第二个括号中传递了"credentials.cookieSecret"作为参数,但是传递给了什么呢?它看起来类似于立即调用函数表达式 (IIFE),但我不确定。
谢谢。
我正在阅读一本关于Node.js和Express的书籍,在其中一个示例中,有一个带有两组括号的函数调用。由于以前没有见过这种情况,所以我希望对代码进行解释。下面是代码:
app.use(require('cookie-parser')(credentials.cookieSecret));
我感到困惑的是第二个括号中传递了"credentials.cookieSecret"作为参数,但是传递给了什么呢?它看起来类似于立即调用函数表达式 (IIFE),但我不确定。
谢谢。
cookie-parser
模块返回一个函数,该函数在你分享的代码中被调用。
app.use(require('cookie-parser')(credentials.cookieSecret));
可以重写为:
var cookieParser = require('cookie-parser')
var cookieParserInstance = cookieParser(credentials.cookieSecret)
app.use(cookieParserInstance)
如果函数返回另一个函数,就会发生这种情况。
下面是一个例子:
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);
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
require('cookie-parser')
返回一个函数,完整的函数声明在 https://github.com/expressjs/cookie-parser#cookieparsersecret-options 中。 - haim770