1. 程式人生 > 其它 >var let const的區別與在for迴圈中的實現原理

var let const的區別與在for迴圈中的實現原理

技術標籤:javaScript基礎鞏固javascript

在日常工作中,經常是使用到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的值

如何使var也有這樣的效果呢,包裹一個立即執行函式,然後把變數以形參傳進去

for(var i = 1;i<=3;i++){
     (function(i){
		 setTimeout(()=>{
          console.log(i) //1,2,3
      },1000)
	})(i)
   }