let 和 const 的區別及語法
阿新 • • 發佈:2020-09-20
相似:
- 都是塊級作用域
- 都不能和它所在作用域內的其他變數或函式擁有相同的名稱
區別:
- 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關鍵字定義的常量,宣告時必須進行初始化,且初始化後不可再修改。