这是我在Google Chrome版本58.0.3029.81(64位)(Windows 10 x64)上运行的脚本
ArrayList sortArrayList= arrayList;
sortArrayList.Sort();
sortArrayList.Reverse();
return sortArrayList[0];
此脚本应打印
<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(" ");
}
document.write(array[i] + '<br/>');
}
}
};
printArray(0, givenArray);
</script>
但它只是打印
23
6
2
6
2
1
2
2
5
2
我的意思是,在递归调用外部for循环结束或函数返回之后。
这有什么问题?
答案 0 :(得分:4)
您正在使用所有j
来电共享的全球printArray
和var
。使用i
制作j
和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(" ");
}
document.write(array[i] + '<br/>');
}
}
};
本地:
{{1}}
永远不要在没有声明的情况下使用变量,除非你希望它们是全局变量。