如何避免JavaScript中出现“超出最大调用堆栈大小”错误?

天才去

我尝试在Firefox和Chrome中都运行以下代码,但该代码可以在Firefox中运行,但可以在Chrome中运行:Maximum call stack size exceeded

const list = new Array(60000).join('1.1').split('.');

function removeItemsFromList() {
    var item = list.pop();

    if (item) {
        removeItemsFromList();
    }
};

removeItemsFromList();

有什么方法可以防止它并使它在所有浏览器中运行?

一定的表现

一种避免错误的选择是仅在Promise.resolve之后进行递归调用

const list = new Array(60000).join('1.1').split('.');

function removeItemsFromList() {
    var item = list.pop();

    if (item) {
        return Promise.resolve().then(removeItemsFromList);
    }
};

removeItemsFromList()
  .then(() => console.log('Done'));

如果要使用它setTimeout而不是Promises,则setTimeout仅在当前堆栈大小太大时才将递归调用置于

const list = new Array(60000).join('1.1').split('.');
let i = 0;

function removeItemsFromList() {
  i++;
  var item = list.pop();
  if (!item) {
    console.log('Done');
    return;
  }
  if (i > 5000) {
    i = 0;
    setTimeout(removeItemsFromList);
  } else {
    removeItemsFromList();
  }
};

removeItemsFromList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

RangeError:超出最大调用堆栈大小(在多个异步/等待调用中出现此错误)

如何避免Observable中超出最大调用堆栈大小?

“超出最大调用堆栈大小”错误

Javascript Recussion 错误 - RangeError:超出最大调用堆栈大小

Javascript最大调用堆栈大小超出错误

如何捕获“超出最大调用堆栈大小”错误?

如何调试最大调用堆栈大小超出错误

Ember Data内部出现错误“超出最大调用堆栈大小”的原因是什么?

Angular 7错误RangeError:超出最大调用堆栈大小

错误RangeError:超出最大调用堆栈大小(角度6)

最大调用堆栈大小超出错误

Angular 2 + CLI:超出最大调用堆栈大小的错误

jQuery错误-超出最大调用堆栈大小

未捕获的错误:超出最大调用堆栈大小

JavaScript:mergeSort返回RangeError:超出最大调用堆栈大小

递归javascript函数导致“超出最大调用堆栈大小”

JavaScript-超出最大调用堆栈大小

Javascript Canvas动画超出了最大调用堆栈大小

超出最大调用堆栈大小?

VueJs超出最大调用堆栈大小

AJAX超出最大调用堆栈大小

我收到 RangeError:Javascript 中的最大调用堆栈大小超出错误

如何解决最大调用堆栈大小超出nuxt.js中的错误

什么是最大调用堆栈大小超出错误以及如何解决?

使用模式实验室时,如何解决最大调用堆栈大小超出的错误?

如何修复Appmaker中的最大调用堆栈大小超出错误

如何修复角度 11 中超出最大调用堆栈大小的错误?

超出最大调用堆栈错误

避免在调用函数本身时超出最大调用堆栈大小