一、let
1.基本用法
let声明的是变量
2.特性
- 不会成为window的属性
- 不允许在声明之前就使用(即不存在变量提升现象)
- 只在其声明的代码块内有效 - 块级作用域{}
- 在相同作用域下,用let声明的变量不允许再重复声明
举例:
//不存在变量提升,会报错
console.log(a); //Uncaught ReferenceError: a is not defined
let a = 'hello';
//不能重复声明,会报错
let a = 'world'; //Uncaught SyntaxError: Identifier 'a' has already been declared
for(let i=0; i<5; i++){
console.log(i);
}
//只在声明的代码块有效,for循环之外找let声明的i,无效,所以报错
console.log(i); //Uncaught ReferenceError: i is not defined
二、const
1.基本用法
const声明一个只读的常量
。一旦声明,常量的值就不能改变。
习惯中,为了和变量名区别,常量名全大写,多个单词中间用_隔开
2.特性
- const一旦声明,就必须立即初始化,不能留到以后赋值。
- 其他特性同let
如果常量保存的是引用数据类型。保存的是地址,所以只要不改变地址,就不改变常量。如下:
const USER = {
name:'Jack',
age:22
};
console.log(USER.name); //22
USER.age = 20;
console.log(USER); //20
3.对象冻结
如果我们不希望声明的常量(引用数据类型)中属性被修改,可以采用对象冻结(Object.freeze())的方法,则无论怎么修改,都会无效。如下:
const USER = Object.freeze({
name:'Jack',
age:22
});
console.log(USER.name); //22
USER.age = 20; // 更改被freeze的常量,不报错,但是会无效
console.log(USER); //22 年龄还是原值
三、ES6声明变量的六中方法
ES5 只有两种声明变量的方法:var
命令和function
命令。
ES6 除了添加let
和const
命令,另外两种声明变量的方法:import
命令和class
命令。
所以,ES6 一共有 6 种声明变量的方法。