有人可以解释一下 "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
接受一个参数x
,returns一个函数可以看到x
(google: "closure") 并且还有自己的参数,y
.
从 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
接受一个参数x
,returns一个函数可以看到x
(google: "closure") 并且还有自己的参数,y
.