gpt4 book ai didi

JavaScript 递归和闭包?

转载 作者:行者123 更新时间:2023-12-02 20:53:20 26 4
gpt4 key购买 nike

我有这个功能(示例:http://jsbin.com/emabe4/)

var a=[];
var log = document.getElementById('log');

function loop(x){

x++;
a.push(x);

if (x < 10){
log.innerHTML = log.innerHTML + "<br/>" + a;
console.log(a);
loop(x)
}

}

随着循环递归地调用自身,数组会变长,并用内部 HTML 写出,如下所示:

[1]
[1,2]
...
[1,2,3,4,5,6,7,8,9]

这就是我希望的工作方式。

但是如果您查看控制台日志,您会看到以下内容:

[1,2,3,4,5,6,7,8,9]
[1,2,3,4,5,6,7,8,9]
...
[1,2,3,4,5,6,7,8,9]

问题:

1)为什么innerHTML和console.log之间存在差异?

2)控制台日志似乎是实际创建的内容,我认为这是由于关闭问题造成的,对吗?如果是这样,有什么解决方法可以做到我想要它做的事情(前者,我可以在数组每次增长时逐步与数组交互)?我之前已经在 while 循环中解决了这个问题,但不知道如何在这里处理它。

最佳答案

console.log(a) is 应该被严格评估,并且将具有与innerHTML相同的结果。这可以使用 console.log(""+ a) 进行验证(或反驳)。正如帖子和评论所示,这因浏览器而异(Chrome 在这里很懒,Firefox 很严格)。

console.log(""+ a) 的情况下,它强制a 中的对象计算为字符串表示形式.

在所有情况下都只有一个a(更重要的是,只有一个数组传递到console.log)。也就是说,这不是代码的闭包问​​题,而是延迟将对象转换为字符串表示形式的问题(在 Chrome 中)。如果它将转换推迟到循环完成之后,则行为将如所描述的那样,它将连续打印出同一个对象 n (10) 次。

祝你编码愉快。

关于JavaScript 递归和闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427631/

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