教你理解let和var的區別
for迴圈的計數器,就很合適使用let命令。
```javascript
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined
上面程式碼中,計數器i只在for迴圈體內有效,在迴圈體外引用就會報錯。
下面的程式碼如果使用var,最後輸出的是10。
```javascript
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
上面程式碼中,變數i是var命令宣告的,在全域性範圍內都有效,所以全域性只有一個變數i。每一次迴圈,變數i的值都會發生改變,而迴圈內被賦給陣列a的函式內部的console.log(i),裡面的i指向的就是全域性的i。也就是說,所有陣列a的成員裡面的i,指向的都是同一個i,導致執行時輸出的是最後一輪的i的值,也就是 10。
如果使用let,宣告的變數僅在塊級作用域內有效,最後輸出的是 6。
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
上面程式碼中,變數i是let宣告的,當前的i只在本輪迴圈有效,所以每一次迴圈的i其實都是一個新的變數,所以最後輸出的是6。你可能會問,如果每一輪迴圈的變數i都是重新宣告的,那它怎麼知道上一輪迴圈的值,從而計算出本輪迴圈的值?這是因為 JavaScript 引擎內部會記住上一輪迴圈的值,初始化本輪的變數i時,就在上一輪迴圈的基礎上進行計算。
好了到此應該理解了
相關文章
- var 和 let 的區別
- 淺談let和var的區別
- var、let和const的區別
- var和let/const的區別
- let與var的區別
- js中var和let的快速區別JS
- var、const、let 的區別
- TypeScript let與var的區別TypeScript
- JS中const、var 和let的區別JS
- let const var 區別
- var let const區別
- let,const,var區別
- js中 let 與 var 的區別JS
- ES6中let和var和const的區別
- ES6 let和var的區別是什麼?
- var與let宣告變數的區別變數
- JavaScript中let、const、var 的區別JavaScript
- 深入理解ES6之var,let,const區別
- [面試專題]從for迴圈看let和var的區別面試
- JavaScript 中的 Var,Let 和 Const 有什麼區別JavaScript
- var、let、const宣告變數的區別變數
- JavaScript中的var、let 及 const 區別JavaScript
- var、let和const三者有哪些區別?
- ES6中的let與var的區別
- 變數和函式宣告提升,let和var const區別變數函式
- es6 let const與var 的區別
- ES6中var,let,const的區別
- ES6中var/let/const的區別
- ES5 和 ES6:let const var 區別
- 1分鐘帶你瞭解var let 和 const 的區別
- rspec中的let和let!區別
- 【前端面試】(四)JavaScript var let const的區別前端面試JavaScript
- var和public的區別
- 詳解 let 和 var
- var、let、const變數宣告的區別及特點變數
- 【ES6】var、let、const三者的區別
- ES6-----for迴圈中setimeout,var與let的區別
- 深入理解JS:var、let、const的異同JS