【问题标题】:JS Loop is looping and crashing browser?JS Loop 正在循环和崩溃浏览器?
【发布时间】:2017-02-12 18:57:27
【问题描述】:
for (i=0;i<channelName.length;i++) {
        if (channelName[i]=="channel"||channelName[i]=="user") {
        checkUserDuplicate(channelName[i]);
    }
}

此循环导致所有浏览器中的“内存不足”崩溃。谁能明白为什么?它似乎在 IF 语句处崩溃,然后以某种方式导致无限循环。

如果您想知道代码的作用,它会在未定义长度的数组中查找关键字“channel”和“user”,然后在下一个位置获取字符串。

任何帮助将不胜感激,因为我已经在这里困惑了 2 个小时。

编辑:channelName 是一个类似 http://www.youtube.com/user/username 的 URL

这是函数:

function checkUserDuplicate(channelName) {
var idarray=[];match=0;$('.channels').each(function(){idarray.push(this.id)});
for (i=0;i<idarray.length;i++) {
    var current=channelName.toLowerCase();compare=idarray[i].toLowerCase();
    if (current==compare) {callError(channelName+" already exists in this collection");match=1;}
} if (match==0) {checkExists(channelName);}

}

一团糟:)

【问题讨论】:

  • checkUserDuplicate 的代码是什么?我猜i 是一个全局变量,你在那个函数中改变它的值?没错,请声明你的变量。
  • 与当前显示的内容不同。 channelName 的价值和大小是多少? checkUserDuplicate 做了什么(我假设它也在循环并可能导致无限循环)?
  • @Teemu 抱歉,不,它不是全局变量。代码非常长。
  • @SpencerWieczorek 我现在会仔细检查一下
  • 那么他们可能共享相同的范围。请添加一个我们可以重现问题的示例。

标签: javascript arrays loops memory crash


【解决方案1】:

在您的for 循环中,如果您不指定var i = 0;,则它可以全局访问。在您的其他函数中,您可以修改 i 的值并导致它没有按预期递增,最终导致无限循环。

抱歉,我没有阅读代码,因为它非常混乱,但这可能是原因

【讨论】:

  • 是的,哈哈,抱歉代码乱七八糟。我只是总是这样写浓缩,没有理由,但只要我知道它的意思:D
  • @LewisHarris 所以..是这个原因吗?
  • 没有。问题出在 idArray.length 为 ==0,因此导致了无限循环。我不知道 idArray 在这部分代码执行后获取数组日期。
【解决方案2】:

在 checkUserDuplicate 函数中,它计算类范围内的 DIV 数量。如果没有类或 DIV,则计数为 0,并传递给 for 循环并创建递归循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多