你在事件响应时改变文本框的值,会导致再次触发textinput事件,然后就死循环了,当然栈就溢出了。而keyup事件不会受影响
我们提供的服务有:成都网站设计、成都做网站、微信公众号开发、网站优化、网站认证、浮山ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的浮山网站制作公司
我先来解释无限递归
先举一个生活中的例子,就是那个经典的《老和尚给小和尚讲故事》的故事:
从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事。
讲的是什么故事呢?
讲的是:
从前有座山,山里有个庙……
这就是无限递归了。
再来说一下你的程序发生无限递归的原因:
ajQuery 是一个函数。执行这个函数时,函数中的 return 语句会返回一个值。
它会返回什么值呢?
返回值是执行一个新的 ajQuery 函数的返回值,
那么这个新的 ajQuery 函数会返回什么值呢?
这个新的 ajQuery 函数会返回又一个新的 ajQuery 函数的返回值,
……
这是无限递归,也是一种死循环。
最后说一下发生溢出的原因:
每次执行 ajQuery 函数,
都会在结束前执行又一个新的 ajQuery 函数,
并等待它结束,然后自身才能结束。
每执行一个函数都要占用一些资源,只有函数结束后才有可能释放这些资源。
可是,在无限递归过程中,不断地执行一个又一个函数,却从不结束这些函数。
所以,占用的资源就会越来越多。
直到占用的资源超出了允许的范围,就溢出了!
JS 左移结果是一个有符号的32位整数,255本身占了8位,左移24位就溢出了
可以参考这个:
这是堆栈溢出错误。
可能的原因及解决办法:
1、查看代码是否有死循环、是否有无法结束的函数调用或递归调用。
2、也有可能是网页上含有病毒脚本,对浏览器进行了堆栈溢出攻击,要杀毒处理。
3、浏览器打开网页过多,导致堆栈耗尽或浏览器由于其它原因奔溃了,重启浏览器试试。
4、重启系统试试。
5、最坏情况,重装浏览器或系统试试。
递归最容易导致的问题就是堆栈溢出了,一般来说操作系统给一个进程划分的栈内存是2M(好像是),按照正常的程序处理,局部变量进栈出栈,栈不太可能会溢出,但是递归会导致不会出栈,这就有可能导致堆栈溢出,你这里定义两个int型变量,即8字节,再加上保存的函数地址等信息,*100000次递归,还有一些其他的入栈的局部变量,可能已经超出了最大的栈空间,所以溢出。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款