[英]How to reuse a closure function assigning it to a variable or constant in JavaScript
我正在解决一个旨在使用闭包的练习。 您必须创建一个函数,该函数返回一个将存储值的函数,并且当您重用它时,将新值添加到已保存的值中。
const firstValue = myFunction(3);
const secondValue = firstValue(4);
// result => 7
这是我用来练习闭包的代码:
function addNumbers(num) {
let storage = 0
let n = num
function adding(n) {
storage += n;
return storage
}
return adding(n)
}
let firstAttemp = addNumbers(4)
let secondAttemp = firstAttemp(3)
console.log(firstAttemp)
这会引发错误“未捕获的 TypeError:firstAttemp 不是函数”
const addNumbers = (a) => (b) => a + b
它被称为柯里化,更多细节在这里。
PS如果你想使用function
语法,它看起来像这样:
function addNumbers(a) {
return function (b) {
return a + b
}
}
正如@skara 在他们的评论中所说, return adding(n)
返回调用adding
的结果而不是返回函数,以便稍后可以使用firstAttemp(3)
调用它。
不幸的是,尽管它仍然不起作用,因为您实际上并没有将传递给addNumber
的值分配给以后添加。
function addNumbers(num) { let storage = 0; let n = num; function adding(n) { storage += n; return storage; } return adding; } let firstAttemp = addNumbers(4); let secondAttemp = firstAttemp(3); console.log(firstAttemp); console.log(secondAttemp); // 3! 😢
您实际上不需要手动将num
的值保存到变量中,因为它是在闭包环绕中捕获的, adding
了正在返回的内容。
function addNumbers(num) { function adding(n) { return num + n; return storage; } return adding; } let firstAttemp = addNumbers(4); let secondAttemp = firstAttemp(3); console.log(secondAttemp); // 7 👍🏻
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.