let const var 之間的區別
阿新 • • 發佈:2019-02-14
let const 均為ES6新增語法,首先看看它倆之間的異同點
一 . let與const相同點
1.宣告的變數只能在塊級作用域有效;
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
2.不存在變數提升;
// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;
// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
3.相同塊作用域內不允許同一變數重複宣告;
// 報錯 function func() { let a = 10; var a = 1; } // 報錯 function func() { let a = 10; let a = 1; }
function func(arg) {
let arg; // 報錯
}
function func(arg) {
{
let arg; // 不報錯
}
}
二 . let與const不同點
const
宣告一個只讀的常量。一旦宣告,常量的值就不能改變。
const a = 3.1415
a // 3.1415
a = 3
如上程式碼執行時會直接報錯 Assignment to constant variable.
意思就是隻讀常量的值不可以改變
const b //錯誤寫法,必需給予初始化值
// const b = 0 //正確寫法
同時const宣告的變數必需給予初始化值,否則也會直接報錯 Missing initializer in const declaration
const
實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體地址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體地址,因此等同於常量。但對於複合型別的資料(主要是物件和陣列),變數指向的記憶體地址,儲存的只是一個指標
const foo = {};
// 為 foo 新增一個屬性,可以成功
foo.prop = 123;
foo.prop // 123
// 將 foo 指向另一個物件,就會報錯
foo = {}; // TypeError: "foo" is read-only
綜上所述let與const的區別已經很明顯了,而let和const 與var 的區別正好就是let和const的相同點加上它們的不同點
var 不存在塊作用域;可以變數提升;允許重複宣告;