const声明的是常量,声明的同时必须进行初始化。
const value = '莫小白';
console.log(value);

const value;
value = '莫小白'
console.log(value);

在声明常量的同时必须赋值,不可声明变量后在赋值。
const声明的常量,只在当前作用域才能被访问,除了这个作用域常量将会被销毁
var isTrue = true;
if( isTrue){
const value = '莫小白';
console.log(value);
}
console.log(value);

在if语句之外value就会被系统销毁
如果说,我们需要使用const声明一个变量,而且后期需要修改这个变量,我们应该怎么办。我们需要将这个变量声明成一个对象,我们可以修改这个变量的属性。
const person = {
name:'莫小白'
};
console.log(person.name);
person.name = '于小沫';
console.log(person.name);

我们可以更改属性值,但是,我们不可以修改绑定!!!
const person = {
name:'莫小白'
};
console.log(person.name);
person = {
name:'于小沫'
};
console.log(person.name);

临时死区
因为let 和 const 并不会声明提前,所以即使我们使用typeof访问变量也会报错
console.log(typeof value);
let value = 'js';

在js中,const和let声明的变量,会保存到TDZ中。只有当程序运声明变量后,变量会从TDZ中移出,变量才可以正常访问。举个例子
function getType(isTrue){
console.log(typeof value);
if(isTrue){
let value = '莫小白';
console.log(typeof value);
}
console.log(typeof value);
}
getType(true);

第一个consle在变量value的代码块外执行的,此时value并不存在TDZ中。这也就是说不存在value这个绑定,typeof会返回一个 undefined 。第二个console因为value已经被创建可以正常访问。第三个console因为在value的代码块外执行的,且这时候value已经被销毁,所以返回一个 undefined 。
网友评论