有人可以解释一下 "function factory" 中的 x 和 y 吗?

Can someone explain x and y in this "function factory"?

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

当您调用 makeAdder() 时,它 return 是一个函数(不是一个值)。因此要使用它,你会得到类似

的东西
makeAdder(4)(5)

这会将 4 加到 5 和 return 9。同样,makeAdder() 这里 return 是另一个函数,这就是为什么我在它后面调用一个参数((5)).

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

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

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

此时add5(y)会给你y + 5.

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

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

makeAdder接受一个参数xreturns一个函数可以看到x(google: "closure") 并且还有自己的参数,y.