先看2段**
//使用var宣告,得到3個3
var a =
;for
(var i =
0; i <
3; i++);
}a[0]
();//3a[1
]();
//3a[2]
();//3
//使用let宣告,得到0,1,2
var a =
;for
(let i =
0; i <
3; i++);
}a[0]
();//0a[1
]();
//1a[2]
();//2
這是為什麼呢??
首先要知道var 宣告作用域是函式作用域,let宣告的作用域是塊級作用域。
還不了解作用域的可以先看看這個,
使用var宣告的時候,i是全域性變數,每次迴圈,i的值都會改變,相當於給i重新賦值了,因此最後輸出後的i是for迴圈完後的i的值,因此輸出結果都是3
使用let宣告時,let作用的是塊作用域,for的每次迴圈就是乙個塊級作用域,因此每次迴圈,就相當於宣告了乙個新的變數i。
for迴圈中let和var的區別
對呀初學j ascript的同學來說,變數提公升永遠都是過不去的坎,相信我們都遇到過這種情況,看下面 var var arr for var i 0 i 10 i arr 2 輸出為10變數i是var命令宣告的,在全域性範圍內都有效,所以全域性只有乙個變數i。每一次迴圈,變數i的值都會發生改變,而迴...
for迴圈中的var和let的區別
for var i 0 i 3 i 30 100 console.log i 先輸出 0 1 2 1 這道題涉及到了非同步 作用域 閉包 settimeout是非同步執行,10ms後往任務佇列裡面新增乙個任務,只有主線上的全部執行完,才會執行任務佇列裡的任務,當主線執行完成後,i是3,所以此時再去執...
let和var在for迴圈中的不同表現
var只有函式作用域,沒有塊級作用域 函式作用域的表現 function test test 10 console.log i i is not defined 塊級作用域對var沒有約束 console.log i 10 從上面的 可了解到,塊級作用域對var是沒有約束作用的。let與var不同,...