你好,我正在做一个javascript编码面试,为即将到来的面试做准备。我有一个问题让我有点困惑。问题如下:
下面说明的是什么概念?
function makeAdder(x) {
return function (y) {
return x + y;
};
}
var addFive = makeAdder(5);
console.log(addFive(3));有4个答案可供选择,然后是: Currying和闭包
我认为这两个都是对的。我最终选择了currying,但我真的认为这也是对闭包的说明?你能解释一下为什么这不能说明闭包吗?
发布于 2021-10-28 09:27:20
call始终是一种语法糖,closures.It不调用函数。它只是改变了它。
对于上面的例子,它只是闭包,因为你接受了另一个变量,这个变量存储内部函数,并以不同的方式执行。与addFive类似,它是内部函数,稍后将被调用。
如果你想修改它,就像我创建的下面这个例子。Currying是闭包的概念,因为它的前导执行花括号有助于同时执行内部函数。所以在这里你不需要存储另一个变量来调用内部函数。
根据定义,currying应将sum(a,b,c)转换为sum(a)(b)(c)。
function makeAdder(x) {
return function (y) {
return x + y;
};
}
console.log(makeAdder(5)(3));
https://stackoverflow.com/questions/69751347
复制相似问题