gpt4 book ai didi

JavaScript 递归不恢复

转载 作者:行者123 更新时间:2023-11-30 09:35:41 26 4
gpt4 key购买 nike

这是我在 Google Chrome 版本 58.0.3029.81(64 位)(Windows 10 x64) 上运行的脚本

<script>  
var givenArray = [23, 6, [2, [6, 2, 1, 2], 2], 5, 2];
var printArray = function (start, array) {
for (i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
printArray(start + 1, array[i]);
}
else {
for (j = 0; j < start; j++) {
document.write("&nbsp;&nbsp;&nbsp;&nbsp;");
}
document.write(array[i] + '<br/>');
}
}
};
printArray(0, givenArray);
</script>

这个脚本应该打印

23
6
2
6
2
1
2
2
5
2

但它只是打印

23
6
2
6
2
1
2

我的意思是,在递归调用外部 for 循环结束或函数返回之后。
这有什么问题?

最佳答案

您正在使用由所有 printArray 调用共享的全局 ij。使用 varij 设为本地:

var printArray = function (start, array) {
for (var i = 0; i < array.length; i++) {
// ^^^^ here
if (Array.isArray(array[i])) {
printArray(start + 1, array[i]);
}
else {
for (var j = 0; j < start; j++) {
// ^^^^ and here
document.write("&nbsp;&nbsp;&nbsp;&nbsp;");
}
document.write(array[i] + '<br/>');
}
}
};

切勿在未声明的情况下使用变量,除非您希望它们是全局变量。

关于JavaScript 递归不恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705370/

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