var let const的區別與在for迴圈中的實現原理
阿新 • • 發佈:2021-02-10
在日常工作中,經常是使用到var let const 來定義變數,但是一直不知道它們有什麼區別,現在總結一下
var :定義的變數沒有塊級作用域,是全域性變數,而且在同一作用域下可以重複定義
let: 定義的變數有塊級作用域,是區域性變數,在同一作用域下不可重複定義,可被修改
const:經常使用const來定義常量,也是有塊級作用域,是區域性變數,在同一作用域下不可重複定義,也不可被修改。
for迴圈在程式碼中使用的頻率還是挺高的,在for迴圈中也是需要定義變數,for本身也是一個塊。那麼使用哪個比較合適呢,下面就以程式碼來看下他們的實現原理
使用var的情況
for(var i = 1;i<=3;i++){
setTimeout(()=>{
console.log(i) //4,4,4
},1000)
}
之所以會出現這樣的結果,是因為var定義的變數是全域性變數,儲存在全域性環境中,每次改變的時候都是改變的這個變數。
let的情況
for(let i = 1;i<=3;i++){
setTimeout(()=>{
console.log(i) //1,2,3
},1000)
}
使用let定義的變數,是有塊級作用域的,每個i儲存在一個塊級中,每次迴圈的時候,不會改變到i的值
for(var i = 1;i<=3;i++){
(function(i){
setTimeout(()=>{
console.log(i) //1,2,3
},1000)
})(i)
}