在Node.js中的require语句之后,第二组括号是什么意思?

时间:2017-03-22 18:06:38

标签: javascript node.js

我今天正在与同事代码合作,我看到了一些我以前从未见过的东西。

我理解语句的第一部分(在文件clean.js中要求)。

但是第二套括号是什么?

require('./tasks/clean')('js', './dist/js')

2 个答案:

答案 0 :(得分:9)

./tasks/clean导出的任何内容都是函数,因此只需使用'js''./dist/js'作为参数调用

相当于以下内容:

const clean = require('./tasks/clean');
clean('js', './dist/js');

答案 1 :(得分:3)

您看到的这种语法称为Function currying,这是在Functional programming范例中编写可组合函数的一种流行技术。 Currying和Functional编程不是新概念,它们已经存在了几十年,但是功能编程开始在JavaScript社区中受到欢迎。

Currying基本上允许您立即从返回函数的函数调用函数调用。

考虑这个函数返回一个函数:

 function foo(x) {
   console.log(x);
   return function(y) {
     console.log(y);
   }
 }

现在调用此函数时,您现在可以执行此操作:

foo(1)(2);

将输出到控制台:

1
2

因此,在您发布的示例中,clean()函数必须返回一个接受两个参数的函数,如下所示:

function clean(a) {
   return function(b, c) {
     console.log(a, b, c);
   }
}

允许像这样调用它:

clean('foo')('bar', 'baz');
//=> 'foo' 'bar' 'baz'

这是一个超级基本的例子,但我希望这有帮助!

相关问题