1. 程式人生 > 實用技巧 >let 和 const 的區別及語法

let 和 const 的區別及語法

相似:

  • 都是塊級作用域
  • 都不能和它所在作用域內的其他變數或函式擁有相同的名稱

區別:

  • const宣告的常量必須初始化,而let宣告的變數不用
  • const定義常量的值不能通過再賦值修改,也不能再次宣告。而 let 定義的變數值可以修改。

補充

我們先來認識一下JavaScrip的兩種作用域:全域性變數函式內的區域性變數

全域性變數

在函式外宣告的變數作用域是全域性的

var name = "Skr";
// 這裡可以使用 name 變數
function myFunction(){
  //這裡也可以使用 name 變數
}

全域性變數在JavaScript程式的任何地方都可以訪問。

區域性變數

在函式內宣告的變數作用域是區域性的

 //這裡不可以使用 name 變數
 
function myFunction(){
       var name = "Skr";
  //這裡可以使用 name 變數
}
 //這裡不可以使用 name 變數

函式內使用var宣告的變數只能在函式內容裡訪問,如果不使用var則是全域性變數。

let和const命令

let命令

基本用法:

  • let是在程式碼塊內有效,var是在全域性範圍有效
{
   let a = 1; 
   a  //a=1
   var b = 0;
}
a   // 報錯
b  //0
  • 不能重複宣告
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a  // Identifier 'a' has already been declared
b  // 4
  • 不存在變數提升
    let不存在變數提升,var會變數提升
console.log(a);  //ReferenceError: a is not defined
let a ="1";

console.log(b);  //undefined
var b = "2";

變數 a 用 let 宣告不存在變數提升,在宣告變數 a 之前,a 不存在,所以會報錯。
變數 b 用 var 宣告存在變數提升,所以當指令碼開始執行的時候,b 已經存在了,但是還沒有賦值,所以會輸出 undefined

const命令

基本用法:

  • const 宣告一個只讀變數,宣告之後不允許改變。意味著,一旦宣告必須初始化,否則會報錯。初始化後值不可再修改。
const ID = 3.141592653589793;
ID = 3.14;      // 報錯
ID = ID + 10;   // 報錯
  • const 宣告的常量必須初始化:
// 錯誤寫法
const ID;
ID = 3.14159265359;

// 正確寫法  
const ID =3.14159265359;

const 的本質

const 定義的變數並非常量,並非不可變,它定義了一個常量引用一個值。使用 const 定義的物件或者陣列,其實是可變的。

物件:

// 建立常量物件
const car = {type:"Fiat", model:"500", color:"pink"};
 
// 修改屬性:
car.color = "red";
 
// 新增屬性
car.owner = "Johnson";

但是不能對常量物件重新賦值:

const car = {type:"Fiat", model:"500", color:"pink"};
car = {type:"Volvo", model:"EX60", color:"red"};    // 錯誤

陣列:

// 建立常量陣列
const cars = ["Saab", "Volvo", "BMW"];
 
// 修改元素
cars[0] = "Toyota";
 
// 新增元素
cars.push("Audi");

但不能對常量陣列重新賦值:

const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"];    // 錯誤

注意:

const如何做到變數在宣告初始化之後不允許改變的?其實const保證的不是變數的值不變,而是保證變數指向的記憶體地址所儲存的資料不允許改動。此時,簡單型別和複合型別儲存值的方式是不同的。
對於簡單型別(數值 number、字串 string 、布林值 boolean),值就儲存在變數指向的那個記憶體地址,因此const宣告的簡單型別變數等同於常量。
而複雜型別(物件object,陣列array,函式function),變數地址指向的記憶體地址其實是儲存了一個指向實際資料的指標,所以const只能保證指標是固定的,至於指標指向的資料結構變不變就無法控制
所以使用const聲明覆雜型別物件時要慎重。

豌豆資源搜尋網站https://55wd.com 廣州vi設計公司http://www.maiqicn.com

小結:

    • 使用var關鍵字宣告的變數在任何地方都可以修改。
    • let 宣告的變數只在 let 命令所在的程式碼塊內有效。
    • const 用於宣告一個或多個常量,宣告時必須進行初始化,且初始化後值不可再修改
    • var關鍵字定義的變數可以先使用後宣告。
    • let關鍵字定義的變數需要先宣告再使用。
    • const關鍵字定義的常量,宣告時必須進行初始化,且初始化後不可再修改。