gpt4 book ai didi

javascript - 你能重置一个变量来存储调用包含闭包的函数的结果吗?

转载 作者:行者123 更新时间:2023-12-01 14:20:25 24 4
gpt4 key购买 nike

是否可以重置调用包含闭包的函数的变量?在下面的示例中,这将是 counter。 (请注意,我是闭包的新手,所以一些评论可能是错误的。)

function makeCounter() {
let count = 0;
return function() {
++count;
return `count equals ${count}`;
};
};

// If you just call it two times without storing the result in a variable, count is reset to zero each time
console.log(makeCounter()()); // count equals 1
console.log(makeCounter()()); // count equals 1

// Since the counter variable holds a reference to the result of the outer function's call (which is the inner returned function, which "closes over" count), the JavaScript engine won't wipe it from memory.
let counter = makeCounter();

// As expected, calling counter again updates it (storing the updated count value)
console.log(counter()); // count equals 1
console.log(counter()); // count equals 2 <-- Can you reset count as stored in counter?

最佳答案

使用该代码,不可能以任何方式重置 count 变量,这就是闭包的力量。

你可以做的是修改计数器,并实现一个方法reset

function makeCounter() {
let count = 0;

const counter = function() {
++count;
return `count equals ${count}`;
}

counter.reset = () => count = 0;

return counter;
};

const counter = makeCounter();
console.log(counter());
console.log(counter());
counter.reset();
console.log(counter());

您还可以向该函数添加一个重置参数。

function makeCounter() {
let count = 0;
return function(reset) {
if (reset)
count = 0;
++count;
return `count equals ${count}`;
};
}

关于javascript - 你能重置一个变量来存储调用包含闭包的函数的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50995312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com