网站建设资讯

NEWS

网站建设资讯

javascript溢出,js堆栈溢出

javascript在使用textinput时出现堆栈溢出

你在事件响应时改变文本框的值,会导致再次触发textinput事件,然后就死循环了,当然栈就溢出了。而keyup事件不会受影响

我们提供的服务有:成都网站设计、成都做网站、微信公众号开发、网站优化、网站认证、浮山ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的浮山网站制作公司

javascript 为什么这样会无限递归自己,从而造成死循环并且溢出?

我先来解释无限递归

先举一个生活中的例子,就是那个经典的《老和尚给小和尚讲故事》的故事:

从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事。

讲的是什么故事呢?

讲的是:

从前有座山,山里有个庙……

这就是无限递归了。

再来说一下你的程序发生无限递归的原因:

ajQuery 是一个函数。执行这个函数时,函数中的 return 语句会返回一个值。

它会返回什么值呢?

返回值是执行一个新的 ajQuery 函数的返回值,

那么这个新的 ajQuery 函数会返回什么值呢?

这个新的 ajQuery 函数会返回又一个新的 ajQuery 函数的返回值,

……

这是无限递归,也是一种死循环。

最后说一下发生溢出的原因:

每次执行 ajQuery 函数,

都会在结束前执行又一个新的 ajQuery 函数,

并等待它结束,然后自身才能结束。

每执行一个函数都要占用一些资源,只有函数结束后才有可能释放这些资源。

可是,在无限递归过程中,不断地执行一个又一个函数,却从不结束这些函数。

所以,占用的资源就会越来越多。

直到占用的资源超出了允许的范围,就溢出了!

JavaScript 左移位溢出问题:255

JS 左移结果是一个有符号的32位整数,255本身占了8位,左移24位就溢出了

可以参考这个:

javaScript heap out of memory,怎么解决

这是堆栈溢出错误。

可能的原因及解决办法:

1、查看代码是否有死循环、是否有无法结束的函数调用或递归调用。

2、也有可能是网页上含有病毒脚本,对浏览器进行了堆栈溢出攻击,要杀毒处理。

3、浏览器打开网页过多,导致堆栈耗尽或浏览器由于其它原因奔溃了,重启浏览器试试。

4、重启系统试试。

5、最坏情况,重装浏览器或系统试试。

怎样避免JavaScript中过长递归导致的堆栈溢出

递归最容易导致的问题就是堆栈溢出了,一般来说操作系统给一个进程划分的栈内存是2M(好像是),按照正常的程序处理,局部变量进栈出栈,栈不太可能会溢出,但是递归会导致不会出栈,这就有可能导致堆栈溢出,你这里定义两个int型变量,即8字节,再加上保存的函数地址等信息,*100000次递归,还有一些其他的入栈的局部变量,可能已经超出了最大的栈空间,所以溢出。


标题名称:javascript溢出,js堆栈溢出
文章URL:http://cdweb.net/article/dsdpegj.html