有人可以在这个“功能工厂”中解释x和y吗?

时间:2017-08-29 14:53:04

标签: javascript functional-programming currying

关闭时来自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)中的yy is undefined

我希望它两次都说Apache Flume。任何人都能解释它是如何运作的吗?

3 个答案:

答案 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