let const var區(qū)別

es6新推出了let const塊級元素
與之前的var的主要區(qū)別以下幾點

let全局變量不再是window

let a='123'
var b='123'
console.log(window.a)//undefine
console.log(window.b)//123

塊級作用域

let a = '123'
function fun(){
      console.log(a);//undefine
}
fun();

let 配合for循環(huán)的獨特應用

let非常適合用于 for循環(huán)內(nèi)部的塊級作用域。JS中的for循環(huán)體比較特殊,每次執(zhí)行都是一個全新的獨立的塊作用域,用let聲明的變量傳入到 for循環(huán)體的作用域后,不會發(fā)生改變,不受外界的影響。

for (var i = 0; i <10; i++) {  
  setTimeout(function() {  // 同步注冊回調(diào)函數(shù)到 異步的 宏任務(wù)隊列。
    console.log(i);        // 執(zhí)行此代碼時,同步代碼for循環(huán)已經(jīng)執(zhí)行完成
  }, 0);
}
// 輸出結(jié)果
10   共10個
// 這里面的知識點: JS的事件循環(huán)機制,setTimeout的機制等

如果把 var改成 let聲明:

// i雖然在全局作用域聲明,但是在for循環(huán)體局部作用域中使用的時候,變量會被固定,不受外界干擾。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循環(huán)體內(nèi)局部作用域,不受外界影響。
  }, 0);
}
// 輸出結(jié)果:
0  1  2  3  4  5  6  7  8 9

let沒有變量提升與let的暫時性死區(qū)

用let聲明的變量,不存在變量提升。而且要求必須 等let聲明語句執(zhí)行完之后,變量才能使用,不然會報Uncaught ReferenceError錯誤。

console.log(b);//123
console.log(a);//Uncaught ReferenceError
let a='123'
var a='123'

let const不可重復聲明

let a = 0;
let a = 'sss';
// Uncaught SyntaxError: Identifier 'a' has already been declared

const 不可重新賦值

const a ='123';
a='12345'//Uncaught TypeError: Assignment to constant variable.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。