繁体   English   中英

如何重用闭包函数,将其分配给 JavaScript 中的变量或常量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM