const定義的變量,和let聲明的變量都不會進行變量提升狡忙,預編譯階段掃描到變量聲明時梳虽,將變量聲明放入暫時性死區(qū),待到執(zhí)行到聲明變量賦值才會離開死區(qū)灾茁,所以使用const窜觉,let定義的變量必須在執(zhí)行聲明賦值之后才可以拿到,否則會出現(xiàn)“Uncaught ReferenceError: value is not defined”錯誤
console.log(val-value);
var val-value=123; ? //123
console.log(const-value);
const const-value=123 ?//Uncaught ReferenceError: const-value is not defined(…)
console.log(let-value);
let let-value=123 ?//Uncaught ReferenceError: let-value is not defined(…)
在同一個塊級作用域中北专,不能用let竖螃,var,const定義同名變量逗余,會產(chǎn)生語法錯誤
if(true)
{
? ? var a=1;
? ? let a=2;
}? ? //Uncaught SyntaxError: Identifier 'a' has already been declared
const 定義一個變量,一旦定義季惩,不能通過賦值直接修改
const val=23录粱;
val=34; ?//Uncaught TypeError: Assignment to constant variable.(…)
當const定義的是一個數(shù)組時画拾,可以通過數(shù)組的隊列方法來修改數(shù)組啥繁;當const定義的是一個對象時,可以添加對象的屬性和方法青抛,但不能通過字面量來重寫對象旗闽。因為數(shù)組也屬于對象,當用字面量方法重新賦值時,是創(chuàng)建了一個新的對象實例适室,原則上已經(jīng)改變了變量嫡意。
const array=[1,2,3,4]
array=[1,2,3];//Uncaught TypeError: Assignment to constant variable.(…)
array.push(5);
console.log(array); // ?[1,2,3,4,5]
array.length=0;
console.log(array) // ?[]