1. 程式人生 > >5分鐘掌握var,let和const異同

5分鐘掌握var,let和const異同

轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。
原文出處:https://dzone.com/articles/javascript-difference-between-var-let-and-const-ke

這個話題對於一些老鳥來說可能根本算不上疑問,但對於新手來說也許除了最常見的var之外,let和const較少使用的機會。

所以在本文中,我將會通過一些例子來為大家介紹如何在Javascript中靈活使用var、let和const這些關鍵字來定義變數,以及這些關鍵字它們之間有什麼異同。

如果你懶得看下面的程式碼,那我可以先把概念結論說出:

  • var定義的變數可被更改,如果不初始化而直接使用也不會報錯
  • let定義的變數和var類似,但作用域在當前宣告的範圍內
  • const定義的變數只可初始化一次且作用域內不可被更改,使用前必須初始化

下面我將通過示例的形式來詳細為大家介紹它們三者之間的異同:

Var

var用以宣告一個變數,並且同時我們可以在宣告語句中初始化所宣告的變數。

例如:

var a = 10;
  • 變數的宣告,會在程式碼被執行之前被處理。
  • var宣告的JavaScript變數,其可用範圍在當前執行上下文。
  • 在函式外宣告的JavaScript變數,其作用範圍是全域性。

考慮以下程式碼片段:

function nodeSimplified() {
  var a =10;
  console.log(a);  // 輸出 10
  if(true) {
   var a=20;
   console.log(a); // 輸出 20
  }
  console.log(a);  // 輸出 20
}

在上面的程式碼中,你可以發現,當變數a在if程式碼段裡被更新時,它的值被全域性更新了,因此在經過了if程式碼後,被更新的值仍然被保留著。這與其他語言中的全域性變數有點類似。但是,在使用這個功能時要非常小心,因為它有可能會覆蓋一個已有的值。

let

let語句在一個塊級範圍裡宣告一個區域性變數。和var

類似,我們可以在宣告時初始化它的值。

例如:

let a = 10;
  • 這個語句允許你建立一個變數,使它的作用範圍被限制在它所在的程式碼塊。
  • 它和Java、C#等其他語言的變數類似。

考慮下面的程式碼片段:

function nodeSimplified() {
  let a =10;
  console.log(a);  // output 10
  if(true) {
   let a=20;
   console.log(a); // output 20
  }
  console.log(a);  // output 10
}

它和大多數語言中我們所見的表現行為是一致的。

function nodeSimplified() {
  let a =10;
  let a =20; // 丟擲語法錯誤
  console.log(a); 
}

錯誤資訊:"未捕獲的異常:識別符號'a'已經被宣告過。" 但如果使用var就沒事:

function nodeSimplified() { 
  var a =10;   
  var a =20;   
  console.log(a);  // 輸出 20 
}

使用let語句,可以很好的維護變數的作用範圍。當使用內部函式時,let語句讓你的程式碼更整潔。

我希望上面的例子能幫你更好地理解var和 let。如果有任何疑問,請在評論區留言。

const

const語言中的變數只能被賦值一次,然後就不能在被賦值。const語句的作用範圍和let語句一樣。

例如:

const a = 10;
function nodeSimplified() {
  const MY_VARIABLE =10;
  console.log(MY_VARIABLE);  // 輸出 10 
}

照例,命名規範指出我們應該用大寫字母宣告常量。當然,const a = 10 在上面的程式碼中會的起到相同的作用。為了讓程式碼長期可維護,命名規範還是值得遵守的。

問題:如果給一個const變數重新賦值會發生什麼? 考慮下面的程式碼:

function nodeSimplified() {
  const MY_VARIABLE =10;
  console.log(MY_VARIABLE);  // 輸出 10
  MY_VARIABLE =20;           // 丟擲型別錯誤
  console.log(MY_VARIABLE); 
}

錯誤資訊:"未捕獲的型別錯誤:給const變數賦值"。

當我們嘗試給已有的const變數賦值時,這段程式碼會丟擲一個錯誤。

介紹就到此結束,希望這篇短小精悍的文章能夠幫助到各位更好的理解在Javascript中宣告變數時使用不同關鍵字上到底有何異同。