有人可以在这个"function factory"中解释 x 和 y 吗?



来自这个关于闭包的文档:

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。 谁能解释一下它是如何工作的?

当你调用makeAdder()时,它会返回一个函数(而不是一个值)。因此,要使用它,您将拥有类似的东西

makeAdder(4)(5)

这会将 4 加到 5 并返回 9。同样,makeAdder()这里返回另一个函数,这就是为什么我在它之后调用了一个参数((5))。

如果你想进一步阅读,这是JavaScript中的一个概念,称为currying。它是一种函数式编程技术。

当调用add5 = makeAdder(5);时,基本上正在发生的事情是:

add5 = function(y){
return 5 + y;
}

在这一点上,add5(y)会给你y + 5.

正如您从评论中注意到的那样,您可以使用makeAdder(x)(y),这本质上是做同样的事情,它归结为:

(function(y){return x + y})(y);

makeAdderx获取参数,并返回一个可以看到x的函数(谷歌:"闭包"),并且还采用自己的参数y

最新更新