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

JavaScript041

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

我先来解释无限递归

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

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

讲的是什么故事呢?

讲的是:

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

这就是无限递归了。

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

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

它会返回什么值呢?

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

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

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

……

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

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

每次执行 ajQuery 函数,

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

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

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

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

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

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

你的代码里有循环引用吧

一般json序列号都会调用字元素的toJson之类的方法,然后就递归了

根除的方法就是不要相互引用,比如User的Roles只存role名字

如果序列化的用途不是持久化数据,可以考虑把有些toJson覆盖掉