使用var
声明变量
全局变量挂载到全局对象:全局对象成员污染问题
允许重复的变量声明:导致数据被覆盖
变量提升:怪异的数据访问、闭包问题
ES6不仅引入了let
关键字来解决变量声明的问题,同时引入了块级作用域的概念。
块级作用域:代码执行时遇到花括号,会创建一个块级作用域,花括号结束,销毁块级作用域。
使用let
声明变量
-
let
声明的变量不会挂载到全局对象 -
let
声明的变量,不允许当前作用域范围内重复声明 -
let
不会存在变量提升,因此不能在声明之前使用它
使用const
声明常量
前三条与let
相同
const
必须在声明时赋值,且不可以重新赋值
// 报错
const a;
a = 1
// 正确
const a = 1;
// 报错 不可重新赋值
const a= 1;
a = 2
注意细节:
- 常量不可变,指声明的常量的内存空间不可变,但并不保证内存空间中的地址指向的其他空间不可变
const obj = {
name : "abc",
age : 19
}
obj.name = "cba";
console.log(obj.name) // cba
- 常量的命名
1)特殊的常量:该常量从字面意义上,一定是不可变的,比如圆周率或者其他一些绝对不可能改变的配置。
该常量的名称全部使用大写,多个单词之间用下划线分割
2)普通常量:使用和之前一样的命名即可
const PI = 3.14
const MOON_EARTH_DISTANCE = 134534513
3.for循环中不可使用常量,但在for-in循环中可用。