javascript - try/catch - 多少递归调用?调用堆栈大小循环
问题描述
我有这个函数,我想在不停止脚本的情况下循环。但是当我使用“console.log”时,该功能停止。如果我删除它,该功能将继续。
超过堆栈大小后如何使此功能继续?
var i = 0;
function computeMaxCallStackSize() {
try {
i++;
console.log(i);
//some function to execute
computeMaxCallStackSize();
} catch (e) {
//'e' is the error when max stack exceeds
// setTimeout() is to wait before calling the function
// if stack size exceeds it recalls the function
setTimeout(computeMaxCallStackSize(), 0);
}
}
computeMaxCallStackSize();
编辑: 此函数将导致堆栈溢出并继续。
var a = 1;
var b = 8769; //stack size
func(a);
function func(a) {
try {
console.log(a);
if(a % b === 0){
setTimeout( function() {func(a+1); }, 0);
} else {
func(a+1);
}
} catch (e) {
console.error(e);
setTimeout( function() {func(a); }, 1);
}
}
解决方案
如果我删除它,该功能将继续。
不,它不会,它也会完成,但要晚得多。console.log()
占用更多资源导致它需要在控制台中呈现文本,因此它可以更快地到达调用堆栈。
您刚刚创建了无限循环,它将一直运行到浏览器内存不足。
推荐阅读
- python - 如何根据用户输入打印输出
- python - 我收到 InvalidArgumentError 因为索引显然超出范围。为什么?
- angular - 有人可以分享有关修复此错误的任何见解吗?
- graphql - 取消 GraphQL 订阅
- java - 如何返回以特定项目开头的 Java 项目列表的组合列表?
- python - 在 pandas 数据框中添加一列,该列是基于其他列条件的另一列的平均值
- ssl - 如何使用 Socket.io 通过 SSL 连接?
- laravel - Laravel 和害虫 PHP | Github 行动 | cURL 错误 7:无法连接到 localhost 端口 8000
- python - 如何按顺序加载 MNIST 数据进行训练?
- ssl - 使用 wsimport 创建 SOAP 客户端,但无法使其与 SSL 证书一起使用