gpt4 book ai didi

javascript - 闭包、递归和 settimeout - 记录空数组

转载 作者:行者123 更新时间:2023-11-30 19:01:18 24 4
gpt4 key购买 nike

以下函数被递归调用,并为“输入”传递不同的值和一个常量“延迟”。为“输入”传递的值是一个对象数组。我遇到的奇怪行为是,虽然第一个 console.log 单独记录每个数组,但 settimeout 中的记录多个空数组,只有最后一个数组在其中具有实际值:

function setDelay(input, delay) {
console.log(JSON.parse(JSON.stringify(input)));
setTimeout(function() {
console.log(JSON.parse(JSON.stringify(input)))
}, delay)
}

根据我对闭包如何工作的理解,我猜想两者应该总是相同的,因为值被单独传递给每个函数,然后在展开过程中可用,就像它过去可用的方式一样第一个电话。

我还使用 try-catch 尝试了代码的变体,但结果相同。有人知道我对闭包的理解哪里缺少细节吗?

编辑:在这里你可以找到整个递归实现:https://jsbin.com/mijitawaku/edit?js,console

最佳答案

您正在记录同一个数组,但它的项目发生了变化。如果您希望项目始终相同,则需要复制数组。因为您使用的是 JSON.stringify,所以很简单:

function setDelay(input, delay) {
input = JSON.parse(JSON.stringify(input));
console.log(input);
setTimeout(function() {
console.log(input)
}, delay)
}

关于javascript - 闭包、递归和 settimeout - 记录空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59489215/

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