1. 程式人生 > 程式設計 >es6 for迴圈中let和var區別詳解

es6 for迴圈中let和var區別詳解

let和var區別:

for(var i=0;i<5;i++){
  setTimeout(()=>{
    console.log(i);//5個5
  },100) 
}
console.log(i);//5
console.log('=============')

for(let j=0;j<5;j++){
  setTimeout(()=>{
    console.log(j);//0,1,2,3,4
  },100) 
}
console.log(j);//報錯 j is not defined

為什麼 用let就可以顯示正確結果,而var就不可以呢?

var是全域性作用域,有變數提升的作用,所以在for中定義一個變數,全域性可以使用,迴圈中的每一次給變數i賦值都是給全域性變數i賦值。

let是塊級作用域,只能在程式碼塊中起作用,在js中一個{}中的語句我們也稱為叫一個程式碼塊,每次迴圈會產生一個程式碼塊,每個程式碼塊中的都是一個新的變數j;

es6中不是說let宣告變數不能重複宣告嗎?看下邊例子:

{
  let a=123;
}
{
  let a=246;
}
console.log(a);//a is not defined;
{ 
  var b=1;
}
{ 
  var b=2;
}
console.log(b);// 2;

{}代表一個塊,這個時候let宣告的變數只在這個塊中起作用,而這個塊對var宣告的變數不起作用。因為var是全域性作用域。

let a=1;
let a=2;
//Uncaught SyntaxError: Identifier 'a' has already been declared
//let不能重複宣告

let b=1;
var b=2;

// Uncaught SyntaxError: Identifier 'a' has already been declared
//let不能重複宣告


var c=3;
var c=4;
console.log(c)//4;var可以重複宣告

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。