gpt4 book ai didi

javascript - 如何避免JavaScript中的 'Maximum call stack size exceeded'错误?

转载 作者:行者123 更新时间:2023-11-28 14:11:57 25 4
gpt4 key购买 nike

我尝试在 Firefox 和 Chrome 中运行以下代码,它在 Firefox 中运行,但在 Chrome 中运行:超出了最大调用堆栈大小

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();

关于javascript - 如何避免JavaScript中的 'Maximum call stack size exceeded'错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com