内存溢出想不通

问题描述 投票:0回答:1

所以我试图回答 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);

javascript
1个回答
0
投票

使用参数

(35, 30, -1)
将触发第二个for循环。 替换后的值如下:

for (let i = 35; i >= 30; i -= (-1)) 
  all.push(i);

您将

step
参数设为负数,但也减少该值,这实际上意味着您将 1
 添加到 
i
。在这种情况下,永远不会达到循环结束条件(
i
从 35 到 +无穷大),导致数组溢出。

© www.soinside.com 2019 - 2024. All rights reserved.