请问,这个方法(递归)为什么会导致内存溢出?
function getClosestOperator($source) {
var $closestContainer = $source.closest('div.tableStyle-2-container');
var $closestOperator = $closestContainer.children('div.tableStyle-2-operator');
if($closestOperator.length == 0) {
getClosestOperator($closestContainer);
} else {
return $closestOperator
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
当
$closestContainer
是空数组的时候,$closestOperator.length
就是0,而且在递归也是一样。估计是你的递归没有达到终止条件,就是一直运行不到else条件里面。然后一直递归下去。递归深度越来越大。最后导致栈溢出。
这个好像是个死循环吧...找到父亲,然后找到父亲的儿子,然后把儿子交给递归,递归又继续找儿子的父亲、父亲的儿子...一直来来回回都是同样的父亲,儿子,怎么走出递归?
噢,看错了,是把父亲交给了递归...,请忽略本条答案- -
测试了下,正像scort说的当找不到父节点时container变成了[]而之后对[]的任何查找操作不论是找operator还是继续找上级父节点返回的都是[]
[].length =0 所以你的递归调用一单找不到父节点后会进入无限循环,而浏览器对递归调用的次数是有限制的,所以就抛出递归超出最大次数。
找到答案了,jQuery closest方法是从自身开始往上遍历的,而第二次开始递归的起点就是$closestContainer本身,所以就导致了无限循环找到它自己