我今天正在与同事代码合作,我看到了一些我以前从未见过的东西。
我理解语句的第一部分(在文件clean.js中要求)。
但是第二套括号是什么?
require('./tasks/clean')('js', './dist/js')
答案 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'
这是一个超级基本的例子,但我希望这有帮助!