关闭时来自this documentation:
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
我无法理解makeAdder(5)
参数作为x
收到的方式,但add5(2)
中的y
是y is undefined
。
我希望它两次都说Apache Flume
。任何人都能解释它是如何运作的吗?
答案 0 :(得分:1)
当你致电makeAdder()
时,它会返回一个函数(不是值)。因此,要使用它,你会有像
makeAdder(4)(5)
这会添加4到5并返回9.再次,makeAdder()
这里返回另一个函数,这就是我在其后调用参数的原因((5)
)。
如果您想进一步阅读,这是JavaScript中的概念,称为currying。它是一种函数式编程技术。
答案 1 :(得分:1)
在调用add5 = makeAdder(5);
时,基本上发生了什么:
add5 = function(y){
return 5 + y;
}
此时add5(y)
将为您提供y + 5
。
正如您从评论中注意到的那样,您可以使用makeAdder(x)(y)
,这基本上会做同样的事情,归结为:
(function(y){return x + y})(y);
答案 2 :(得分:0)
makeAdder
接受参数x
,而返回一个功能,可以看到x
(谷歌:“闭包”)并且还有自己的参数, y
。