点击上方蓝字
这里,我们要解决的一个问题是,如何用最简单的方法处理JavaScript堆栈溢出的问题,所以,我们得搞一段代码,能让它产生堆栈溢出。如下
这是一个数组,长度为100000。其中倒数第二位的值设成了\\’小郑搞码事\\’(为了下面代码演示直观一点),其它位都是按数字顺序输出。
一,产生溢出代码
这段代码很容易看懂,主要利用了一个递归的方法,里面用了一个数组的pop方法,输出数据中所有的值。我们运行一下之后,就产生了堆栈溢出,如下结果:
原因就是每次执行代码时,都会分配一定尺寸的栈空间,每次方法调用时都会在栈里 储存一定信息(如参数,局部变量,返回值等)。这些信息再少也会占用一定空间,累积下来,自然就超过线程的栈空间了。
二,堆栈调用改成事件循环
保留这个递归,消除堆栈溢出,最简单的方法就是改成事件循环来处理,代码很简单:
将nextItem函数直接运行改成加一个定时器。当item不为null,则将函数nextItem推送到事件队列,并且函数退出,从而使调用堆栈清零,看一下输出结果:
没有问题。
总结一下:
JavaScript中解决堆栈溢出,最简单的方法是将堆栈调用改成事件循环来处理。当然还有一些其它的方法,如闭包,或者优化一下现有的代码等。
以上就是朝夕生活(www.30zx.com)关于“JavaScript中解决堆栈溢出,简单的方法是将堆栈调用改成事件循环”的详细内容,希望对大家有所帮助!