for迴圈中let和var的區別

2021-10-21 15:14:26 字數 616 閱讀 3873

先看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不同,...