for循環中let和var的區別


前言

對呀初學JavaScript的同學來說,變量提升永遠都是過不去的坎,相信我們都遇到過這種情況,看下面

問題:

var

var arr = [];
for(var i = 0; i <= 10; i++ ){
    arr[i] = function(){<br>      console.log(i)<br>   }
}
arr[2]()//輸出為10

變量i是var命令聲明的,在全局范圍內都有效,所以全局只有一個變量i。

每一次循環,變量i的值都會發生改變,而循環內被賦給數組a的函數內部的console.log(i),br標簽 里面的i指向的就是全局的i。

也就是說,所有數組a的成員里面的i,指向的都是同一個i,導致運行時輸出的是最后一輪的i的值,也就是 10。

let

let arr = [];
for(let i = 0; i <= 10; i++ ){

arr[i] = function(){<br>      console.log(i)<br>   }

} console.lg(arr[2]) //輸出為2

變量i是let聲明的,當前的i只在本輪循環有效,所以每一次循環的i其實都是一個新的變量,所以最后輸出的是6。

你可能會問,如果每一輪循環的變量i都是重新聲明的,那它怎么知道上一輪循環的值,從而計算出本輪循環的值?

這是因為 JavaScript 引擎內部會記住上一輪循環的值,初始化本輪的變量i時,就在上一輪循環的基礎上進行計算。

原文鏈接:https://www.cnblogs.com/qlb-7/p/14500958.html


免責聲明!

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



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