webstorm 内存溢出怎么弄_请问,这个方法(递归)为什么会导致内存溢出?

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

}

};

b0ba866d84da5abd6d2432217ff5bf99.png

$closestContainer

是空数组的时候,

$closestOperator.length

就是0,而且在递归也是一样。

function getClosestOperator($source) {

var $closestContainer = $source.closest('div.tableStyle-2-container');

var $closestOperator = $closestContainer.children('div.tableStyle-2-operator');

if(!$closestContainer.length)return null;

if($closestOperator.length == 0) {

return getClosestOperator($closestContainer);

} else {

return $closestOperator

}

};

估计是你的递归没有达到终止条件,就是一直运行不到else条件里面。然后一直递归下去。递归深度越来越大。最后导致栈溢出。

这个好像是个死循环吧…找到父亲,然后找到父亲的儿子,然后把儿子交给递归,递归又继续找儿子的父亲、父亲的儿子…一直来来回回都是同样的父亲,儿子,怎么走出递归?

噢,看错了,是把父亲交给了递归…,请忽略本条答案- –

测试了下,正像scort说的当找不到父节点时container变成了[]而之后对[]的任何查找操作不论是找operator还是继续找上级父节点返回的都是[]

[].length =0 所以你的递归调用一单找不到父节点后会进入无限循环,而浏览器对递归调用的次数是有限制的,所以就抛出递归超出最大次数。

找到答案了,jQuery closest方法是从自身开始往上遍历的,而第二次开始递归的起点就是$closestContainer本身,所以就导致了无限循环找到它自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值