js的es6中for循環中let和var區別


 let和var區別:

 1 for(var i=0;i<5;i++){
 2    setTimeout(()=>{
 3         console.log(i);//5個5
 4     },100) 
 5 }
 6 console.log(i);//5
 7 console.log('=============')
 8 
 9 for(let j=0;j<5;j++){
10    setTimeout(()=>{
11         console.log(j);//0,1,2,3,4
12     },100) 
13 }
14 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可以重復聲明

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM