使用setTimeout函数解决栈溢出问题
2024-09-02 12:33:05
下面的代码,如果队列太长会导致栈溢出,怎样解决这个问题并且依然保持循环部分:
var list = readHugeList();
var nextListItem = function() {
var item = list.pop();
if (item) {
// process the list item...
nextListItem();
}
};
通过修改nextListItem
功能可以避免潜在的堆栈溢出,如下所示:
var list = readHugeList(); var nextListItem = function() {
var item = list.pop(); if (item) {
// process the list item...
setTimeout( nextListItem, 0);
}
};
栈溢出主要是因为循环事件,而不是栈。当执行nextListItem时,如果item不是null,在settimeout函数中的nextListItem会推入到事件队列中。当事件空闲,则会执行nextListItem,因此,这种方法从开始到结束没有直接进行循环调用,可以不用考虑循环次数。
关于setTimeout函数想要了解更多,可以参考 你应该知道的setTimeout秘密(原文)
最新文章
- NodeJs框架
- 最新AFNetworking
- 数据结构与算法(1)支线任务3——Largest Rectangle in Histogram
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
- 设置Android studio黑色主题
- 咋一看DWoo 比 Smarty要好
- How to Iterate Map
- linux--基础学习笔记--软件安装
- OpenXml操作Word的一些操作总结. - 天天不在
- Why Creating a Meaningful Morning Routine Will Make You More Successful
- Java数据库连接池的几种配置方法(以MySQL数据库为例)
- 带你深入了解Web站点数据库的分布存储
- 51单片机引脚ALE/PROG/PSEN/EA/Vpp
- RegExp类型(正则表达式)
- JMX与Spring
- echarts研究
- ACM数据对拍程序
- 【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境
- turple list dict 互相转换
- SQL Server,MySQL,Oracle三者的区别
热门文章
- [sonata admin] argument ";$code"; of method
- 创建vue项目及引入插件
- some方法过滤
- IOS 检测摇晃 几个问题
- System.Web.Mvc.HttpNotFoundResult.cs
- CF 1281B Azamon Web Services
- mtk 的conferrence call建立流程
- Python学习day24-面向对象的三大特征之继承
- python 第三方库的安装方法
- Django项目: 4.用户登录登出功能