const定义的变量,和let声明的变量都不会进行变量提升,预编译阶段扫描到变量声明时,将变量声明放入暂时性死区,待到执行到声明变量赋值才会离开死区,所以使用const,let定义的变量必须在执行声明赋值之后才可以拿到,否则会出现“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定义同名变量,会产生语法错误
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定义的是一个数组时,可以通过数组的队列方法来修改数组;当const定义的是一个对象时,可以添加对象的属性和方法,但不能通过字面量来重写对象。因为数组也属于对象,当用字面量方法重新赋值时,是创建了一个新的对象实例,原则上已经改变了变量。
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) // []