点击上方蓝字
这里 , 我们要解决的一个问题是,如何用最简单的方法处理JavaScript堆栈溢出的问题 , 所以,我们得搞一段代码,能让它产生堆栈溢出 。如下
这是一个数组,长度为100000 。其中倒数第二位的值设成了\’小郑搞码事\’(为了下面代码演示直观一点),其它位都是按数字顺序输出 。
一,产生溢出代码
这段代码很容易看懂,主要利用了一个递归的方法,里面用了一个数组的pop方法,输出数据中所有的值 。我们运行一下之后,就产生了堆栈溢出 , 如下结果:
原因就是每次执行代码时,都会分配一定尺寸的栈空间,每次方法调用时都会在栈里 储存一定信息(如参数,局部变量,返回值等) 。这些信息再少也会占用一定空间,累积下来 , 自然就超过线程的栈空间了 。
二,堆栈调用改成事件循环
保留这个递归,消除堆栈溢出,最简单的方法就是改成事件循环来处理,代码很简单:
将nextItem函数直接运行改成加一个定时器 。当item不为null,则将函数nextItem推送到事件队列,并且函数退出,从而使调用堆栈清零,看一下输出结果:
没有问题 。
总结一下:
JavaScript中解决堆栈溢出 , 最简单的方法是将堆栈调用改成事件循环来处理 。当然还有一些其它的方法,如闭包,或者优化一下现有的代码等 。
【JavaScript中解决堆栈溢出,简单的方法是将堆栈调用改成事件循环】以上就是朝夕生活(www.30zx.com)关于“JavaScript中解决堆栈溢出,简单的方法是将堆栈调用改成事件循环”的详细内容,希望对大家有所帮助!
猜你喜欢
- 一文搞定递归、非递归的左右互搏术
- 安卓用户注意:微信闪退、无响应,使用这个方法有效避免
- CF手游微信登录不了 微信登录失败解决方法
- 手机APP经常弹出“无响应”?可以尝试这几个方法
- 手机应用总是无响应?只需点击这里一下就能解决,赶紧悄悄尝试
- 中国十大童车品牌排行榜:永远上榜,第一是世界知名品牌
- 暖暖环游世界剑三微信打不开解决方法
- 手机开了4G移动网络,却无法上网?一分钟教你正确解决方式
- QQ、微信使用正常但打不开网页,怎么办?
