我正在尝试构建一个带有两个参数(整数)的函数,并从用户通过表单提供的所有整数构建一个数组。 我在控制台中收到“太多递归”的消息。我猜我有一个无限循环。我如何突破它,所以它只通过.innerHTML打印div中的数组list []?
这是循环函数:
var fNum = parseInt(document.getElementById("first").value);
var sNum = parseInt(document.getElementById("second").value);
var list = []
var i;
function calculate() {
for( var i = fNum; i <= sNum; i++){
list.push(i);
break;
document.getElementById('result').innerHTML = list;
}
calculate();
}
这是一个Bin:http://jsbin.com/EcOtUJIx/2/
答案 0 :(得分:4)
您的函数编写为始终调用自身。该过程无法停止,因此导致“过多的递归”。
该函数在循环中也有一个逻辑错误,在向列表中添加单个值后,总是退出。 break;
语句没有条件,因此后续的DOM调用永远不会执行。也就是说,您的代码等同于:
function calculate() {
list.push(fNum);
calculate();
}
当然,那个更简单的功能会以完全相同的方式失败。
答案 1 :(得分:1)
将代码修改为
var fNum = parseInt(document.getElementById("first").value);
var sNum = parseInt(document.getElementById("second").value);
var list = [];
function calculate() {
for( var i = fNum; i <= sNum; i++)
{
list.push(i);
}
document.getElementById('result').innerHTML = list;
}
calculate();
答案 2 :(得分:0)
可能这就是你需要的一切。您不必使用递归来执行任务。 这是jsbin
function calculate() {
var fNum = parseInt(document.getElementById("first").value);
var sNum = parseInt(document.getElementById("second").value);
var list = new Array()
for( var i = fNum; i <= sNum; i++){
list.push(i);
}
document.getElementById('result').innerHTML = JSON.stringify(list);
}