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.

  一個很小的問題,被困住了將近半個小時,幸好有老大指點。所以以后大家在做多重循環的時候就要注意這個問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM