JavaScript函数调用中为什么会有两组括号?

4

我正在阅读一本关于Node.js和Express的书籍,在其中一个示例中,有一个带有两组括号的函数调用。由于以前没有见过这种情况,所以我希望对代码进行解释。下面是代码:

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

我感到困惑的是第二个括号中传递了"credentials.cookieSecret"作为参数,但是传递给了什么呢?它看起来类似于立即调用函数表达式 (IIFE),但我不确定。

谢谢。


3
由于require('cookie-parser')返回一个函数,完整的函数声明在 https://github.com/expressjs/cookie-parser#cookieparsersecret-options 中。 - haim770
@haim770干得好。谢谢你的帮助,非常感激。 - Rey Bango
3个回答

5

cookie-parser 模块返回一个函数,该函数在你分享的代码中被调用。

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

可以重写为:

var cookieParser = require('cookie-parser')

var cookieParserInstance = cookieParser(credentials.cookieSecret)

app.use(cookieParserInstance)

2

如果函数返回另一个函数,就会发生这种情况。

下面是一个例子:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接