【问题标题】:Javascript code goes into infinite loopJavascript代码进入无限循环
【发布时间】:2016-06-06 10:35:59
【问题描述】:

以下代码进入无限循环并在网页中崩溃我需要知道它有什么问题?

    for (var i = 0; i < 2; i+1) {
            for (var j = i; j < 8; j + 2) {
                console.log(arr[j].Qu);
            }
            console.log(arr[i]);
        }

【问题讨论】:

  • 你想在这里实现什么,目前还不清楚,为什么j等于i
  • @CeylanMumunKocabaş 我想为我的业务中的一些业务逻辑创建基于彼此的嵌套循环

标签: javascript loops


【解决方案1】:

i+1 不会更新 i 的值,因此 i 始终具有值 1,因为每次运行都需要 0+1,因此永远不会 > 2 并且永远不会结束 你需要用 i++ 改变它,像这样

for (var i = 0; i < 2; i++) {

另外,正如@Xufox 指出的那样,更新你的 J 循环

for (var j = i; j < 8; j += 2) {

i+1 不是赋值操作,这就是你需要自己赋值的原因。 i++j+=2 转换为

i = i+1;
j= j+2;

并且右手操作的结果是自赋值给变量

【讨论】:

  • j 相同,应该是 j += 2
  • @moaatazaamer 您必须使用赋值运算符 i = i + 1 将值赋回 i 或使用增量运算符 i++ 这是相同的快捷方式。
  • @moaatazaamer i + 1 只会返回 i + 1 的值。为了将该值保存回变量中,您必须执行以下操作:i = i+1 或简写版本i++
  • @moaatazaamer 如果它帮助并修复了您的错误,请记住接受答案。
  • 是的,我当然会,但为什么它可以在 C# ( i+1 ) 等语言上使用
【解决方案2】:

值未分配回变量。

 for (var i = 0; i < 2; i+=1) { // i++
            for (var j = i; j < 8; j+=2) {
                console.log(arr[j].Qu);
            }
            console.log(arr[i]);
        }

【讨论】:

    【解决方案3】:

    i+1 不会修改 i 值。 你可以改写i++

    同样,j + 2 不会更新 j。 你应该写j += 2

    这是更正后的代码:

    for (var i = 0; i < 2; i++) {
        for (var j = i; j < 8; j += 2) {
            console.log(arr[j].Qu);
        }
        console.log(arr[i]);
    }
    

    【讨论】:

      【解决方案4】:

      for (var i = 0; i < 2; i+=1) {
              for (var j = i; j < 8; j+= 2) {
                  console.log(arr[j]);
              }
              console.log(arr[i]);
          }

      【讨论】:

      • 也许一个描述变化的简短句子会很好。 :)(有时很难发现差异)
      猜你喜欢
      • 2013-12-30
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多