var、let、const 比較

let 和const 是ES6新定義的,存在一定特性。
let用來聲明變量,const 用來聲明常量。

一、塊級作用域

  1. let、const具有塊級作用域
  2. var不存在塊級作用域,可以通過立即執(zhí)行函數(shù)實現(xiàn)塊級作用域

如果在塊級作用域外訪問let聲明的變量,就會報錯。

{
  let a = 1;
}
console.log(a);   // Uncaught ReferenceError: a is not defined

如果在塊級作用域外訪問const聲明的變量,會報錯。

{
  const a = 1;
}
console.log(a);   // Uncaught ReferenceError: a is not defined

使用var聲明的變量,不存在塊級作用域,所以不會報錯。

{
  var a = 1;
}
console.log(a);   // 1

使用var通過立即執(zhí)行函數(shù)實現(xiàn)塊級作用域

(function(){
  var a = 1;
})()
console.log(a);    // Uncaught ReferenceError: a is not defined

二、 先使用再聲明

  1. let、const不能先使用再聲明
  2. var可以先使用再聲明

let先使用,在聲明,會報錯

console.log(a);  // Uncaught ReferenceError: a is not defined
let a = 1;

const先使用,在聲明,會報錯

console.log(a);  // Uncaught ReferenceError: a is not defined
const a = 1;

const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。

const a;   // Uncaught SyntaxError

var可以先使用再聲明

console.log(a);  //  1
var a = 1;

三、暫時性死區(qū)

在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱為“暫時性死區(qū)”(temporal dead zone,簡稱 TDZ)。

  1. let 、const 都存在暫時性死區(qū)

  2. var不存在塊級作用域,而且具有變量提升,因此不存在暫時性死區(qū)

let在塊級作用域內(nèi),存在暫時性死區(qū),任何聲明前的調(diào)用都會報錯。

var a = 1;
if(true) {
  console.log(a);   // Uncaught ReferenceError
  let a = 3;
}

const 在塊級作用域內(nèi),存在暫時性死區(qū),任何聲明前的調(diào)用都會報錯

var a = 1;
if(true) {
  console.log(a);   // Uncaught ReferenceError
  const a = 3;
}

var 不存在塊級作用域

var a = 1;
if(true) {
  console.log(a);   //1
  var a = 3;
  console.log(a); //3
}

四、 相同作用域內(nèi),重復聲明

  1. let、const不能重復聲明
  2. var 可以重復聲明

let、const不能重復聲明,會報錯

let a = 2;
let a = 3;   // Uncaught SyntaxError

const b = 2;
const b = 3   // Uncaught SyntaxError

var 可以重復聲明,且以最后的聲明為準

var c =2;
var c = 4;
console.log(c);  // 4

參考資料:

ES6入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容