1. 程式人生 > 程式設計 >javascript的var與let,const之間的區別詳解

javascript的var與let,const之間的區別詳解

目錄
  • 作為全域性變數時
  • 變數提升
  • 暫時性死區
  • 塊級作用域
  • 重複宣告
  • 修改宣告的變數(常量與變數宣告)
  • 總結

說到中宣告變數的幾種方法也就是varletconst了,letconstes6中新增的命令。那麼它們之間有什麼區別呢?

我們先整體說一下三者的區別,在詳細介紹,var、let、const的區別主要從以下幾點分析:

  • 作為全域性變數時的不同
  • 變數提升
  • 暫時性死區
  • 塊級作用域
  • 重複宣告
  • 修改宣告的變數

作為全域性變數時http://www.cppcns.com

ES5中,頂層物件的屬性和全域性變數是等價的,用var宣告的變數既是全域性變數,也是頂層變數的屬性

但是ES6中用let宣告的變數可以在全域性訪問到,但是並沒有在頂層變數的屬性上,const

宣告的常量同樣也不會在頂層變數上

請新增圖片描述

變數提升

var宣告的變數存在變數提升,及變數可以在宣告之前呼叫,值為undefined

letconst不存在變數提升,即它們所宣告的變數一定要在聲明後使用,否則會報錯

console.log(a)  // undefinedvar a = 1console.log(b)  // Cannot access 'b' before initializationlet b = 2console.log(c)  // Cannot access 'c' before initializationconst c = 3console.log(a)  // undefined
var a = 1

console.log(b)  // Cannot access 'b' before initialization
let b = 2

console.lFMoIIm
og(c) // Cannot access 'c' before initialization const c = 3

暫時性死區

var不存在暫時性死區

letconst存在暫時性死區,只有等到宣告變數的那一行程式碼被執行後,才可以獲取和使用該變數

其實這一點就是有上一點變數提升延伸而來的區別。因為var宣告的變數存在變數提升,在宣告之前使用該變數值為undefined,不會報錯,所有沒有暫時性死區。letconst在該作用域開始前後,變數或常量宣告之前使用會報錯,這一塊區域也就被稱為暫時性死區

例同上文:

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

console.log(b)  // FMoIIm
Cannot access 'b' before initialization let b = 2 console.log(c) // Cannot access 'c' before initialization const c = 3

塊級作用域

var不存在塊級作用域

letconst存在塊級作用域

{    var a = 2}console.log(a)  // 2{    let b = 2}console.log(b)  // Uncaught ReferenceError: b is not defined{    const c = 2}console.log(c)  // Uncaught ReferenceError: c is not defined

重複宣告

var在相同作用域下允許重複宣告,後面宣告的變數會覆蓋前面的變數宣告

letconst在相同作用域下不允許重複宣告

var a = 10
var a = 20 // 20

let b = 10
let b = 20 // Identifier 'b' has already been declared

const c = 10
const c = 20 // Identifier 'c' has already been declared

修改宣告的變數(常量與變數宣告)

varlet宣告的是變數,聲明後的變數可被修改

const宣告得失常量,只讀。一旦宣告,常量的值就不能改變。但是需要注意的是,對於引用資料型別,Script中的變數或者常量儲存的是該資料的儲存地址,只要不直接修改該常量的引用,修改其指向的物件的屬性是可以的。

var a = 10
a = 20
console.log(a)  // 20

let b = 10
b = 20
console.log(b)  // 20

const c = 10
c = 20 // Uncaught TypeError: Assignment to constant variable

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!