下面的代码,如果队列太长会导致栈溢出,怎样解决这个问题并且依然保持循环部分:

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秘密(原文)

最新文章

  1. NodeJs框架
  2. 最新AFNetworking
  3. 数据结构与算法(1)支线任务3——Largest Rectangle in Histogram
  4. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
  5. 设置Android studio黑色主题
  6. 咋一看DWoo 比 Smarty要好
  7. How to Iterate Map
  8. linux--基础学习笔记--软件安装
  9. OpenXml操作Word的一些操作总结. - 天天不在
  10. Why Creating a Meaningful Morning Routine Will Make You More Successful
  11. Java数据库连接池的几种配置方法(以MySQL数据库为例)
  12. 带你深入了解Web站点数据库的分布存储
  13. 51单片机引脚ALE/PROG/PSEN/EA/Vpp
  14. RegExp类型(正则表达式)
  15. JMX与Spring
  16. echarts研究
  17. ACM数据对拍程序
  18. 【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境
  19. turple list dict 互相转换
  20. SQL Server,MySQL,Oracle三者的区别

热门文章

  1. [sonata admin] argument "$code" of method
  2. 创建vue项目及引入插件
  3. some方法过滤
  4. IOS 检测摇晃 几个问题
  5. System.Web.Mvc.HttpNotFoundResult.cs
  6. CF 1281B Azamon Web Services
  7. mtk 的conferrence call建立流程
  8. Python学习day24-面向对象的三大特征之继承
  9. python 第三方库的安装方法
  10. Django项目: 4.用户登录登出功能