zoukankan      html  css  js  c++  java
  • js for 循环中的 变量问题。

    今日处理项目中的一个循环,本来就是一个小小的for循环,后来发现该段程序出现了问题,仔细检查代码没有发现其中的错误。无奈只好叫来了老大帮忙。通过在模版中断点调试(该方式只能自己写debugger断点)我们找到了问题的所在。首先看我们的循环:

    for(var i =0, len = arr.length; i<len; i++){
       
      console.log(arr[i]);
       for(var i=0; i<x.length; i++) {
       console.log(x[i]);
    }  
    
    }

    这是一个很简单的嵌套循环,但问题出在这里。我们在第一个for循环内定一个变量I,同时在第二个循环中也定义了同名的i,根据老大的说法是: 第二个i是局部变了,它的定义不影响外层的i。但是,经过调试,结果与他说的完全相反。无论是第一个for循环中的i或者第二个循环中的i都是同一个全局变量,所以第二个循环中的变量将第一个i覆盖了!!!.也就是说for()循环中的作用域是全局的,是指向父级,并不是像function一样创造了一个独立的环境。为了证实这个说法,我们可以写下列例子。

    for(var i =0; i<5; i++){
       console.log(i);
       for(var i=0; i<8; i++) {
          console.log(i);
       }  
    }

    可以在浏览器中看到他连续输出一段数字:

    第一个0是外层的for输出的,接下来所有的数字都是里面那层for循环输出的。可以看到,外层只循环了一次,这是因为在里面那个关键字i循环过后被复制为8,那么当外面那层做第二循环的时候会对比条件i<5,显然,此时该条件已经不满足了,外层就不会再循环了。但是还是会执行一下i++,最后,i就成了9.

      一个很小的问题,被困住了将近半个小时,幸好有老大指点。所以以后大家在做多重循环的时候就要注意这个问题了。

  • 相关阅读:
    Linux GCC
    操作系统中的一些数据结构
    《C程序设计》指针部分学习记录-易混点
    操作系统原理与实践-试验2操作系统的引导记录
    输入字符串测试
    实模式和保护模式
    Unity周记: 2020.07.06-07.12
    Unity论坛问答-如何裁剪一个多边形
    Unity论坛问答-如何让Camera.ScreenToWroldPoint在XZ平面上移动
    Unity杂谈-SRP为什么不再使用CG
  • 原文地址:https://www.cnblogs.com/constantince/p/4442576.html
Copyright © 2011-2022 走看看