我正在尝试编写一个递归方法,它可以array/value作为输入然后处理输入.
<html>
<body>
<script>
function process(array){
if (array instanceof Array) {
for(i=0; i < array.length; i++){
process(array[i]);
}
} else {
document.write(array + "<br />");
}
}
process([3, 4, 5, [4,1], [5,1,2],[6,1]]);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我尝试运行这个程序时,它看起来像是一个无限循环.为什么?
Aru*_*hny 13
这是因为你的迭代变量"i"的范围,如果你将它声明为局部变量,该方法将正常工作.例如:
for(var i=0; i < array.length; i++)
Run Code Online (Sandbox Code Playgroud)
如果创建不带"var"关键字的变量,则变量的范围将为全局(窗口).
在您调用进程([4,1])的情况下,变量i的值为3,然后在调用期间,变量"i"的值被设置为"0",然后增加到"1"和" 2"然后完成值[4,1]的处理,并将控制权交还给呼叫者.但由于变量"i"具有全局范围,因此"i"的值被修改为"2"而不是"3",因此这会导致主循环再次处理值[4,1].这导致无限循环.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |