let 命令
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
具体特性如下:
1. var 可声明前置
a = 3
var a
var a = 4
2. let不可声明前置
a = 3 //报错
let a
3. let不可重复声明
let a = 3
let a = 4 //报错
var a = 5 //报错
4. 存在块级作用域
for(let i =0; i<3; i++){
console.log(i)
}
console.log(i) //报错
IIFE的替换()
(function(){
var a = 1
}())
{
let a = 1
}
5 暂时性死区(TDZ):在let声明变量之前都是该变量的死区,在死区内该变量不可使用
if (true) {
tmp = 'abc'; //报错
let tmp;
}
const 命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。
1. const 声明的常量不可改变
const a = 1
a = 2 //报错
const obj = {a: 1}
obj.a = 2 //没问题
obj = {a: 2} //报错
2. 适用于let的同样适用于const
es6注意
应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句
var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined