ES6 新增了let命令,用来声明变量。个人感觉这很像 Java 的变量声明特性
1. 变量声明的方式
声明变量可以有如下几种方式
- 只声明,后赋值
let a
a = 100
- 一次声明多个变量
let b, c, d;
- 声明的同时,直接赋值
let e = 100;
- 大杂烩,一次声明多个变量并赋值
let f = 100, g = 'hello es6', h = []
2. let 具有会计作用域
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。类似于 Java 中的局部变量的效果。
{
let x = 100
}
console.log('x: '+ x)
结果为:ReferenceError: x is not defined
3. 不存在变量提升效果
此提升非彼提升,这里的提升不是说升级的意思,而是提前加载的意思。
- 先看看变量提升的效果
console.log('y: ' + y)
var y = 100
运行结果:y: undefined,y是在打印之后才申明的,所以是被提前加载了
- let 中没有提前加载效果
console.log('z: ' + z)
let z = 100
运行结果:ReferenceError: Cannot access ‘y’ before initialization