所以我试图回答 Eloquent Javascript 第 4 章(范围之和)中的这个练习(检查页面底部)。
我的问题是,在运行某些组合时出现“未捕获内存不足”错误,例如我在此处粘贴的示例。
我没有发现代码有任何问题。如果我将范围调用的开始/结束从 35, 30, -1 更改为 30, 35, 2,我会得到一个结果,所以我很困惑。
感谢任何帮助。
https://eloquentjavascript.net/04_data.html
let all = [];
function range (start, end, step = 1) {
if (start < end) {
for (let i = start; i <= end; i += step)
all.push(i);
}
else if (start > end) {
for (let i = start; i >= end; i -= step)
all.push(i);
}
else
throw new Error
("Start is equal to End or something else went wrong! Check your input");
return all;
}
range(35, 30, -1);
console.log(all);
使用参数
(35, 30, -1)
将触发第二个for循环。
替换后的值如下:
for (let i = 35; i >= 30; i -= (-1))
all.push(i);
您将
step
参数设为负数,但也减少该值,这实际上意味着您将 1
添加到
i
。在这种情况下,永远不会达到循环结束条件(i
从 35 到 +无穷大),导致数组溢出。