使用let和const取代var。
let
let声明的变量只在let命令所在的代码块中有效
优点:
1.不存在变量提升
2.暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
3.不允许重复声明
// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}
const
const是常量索引,而非常量。
1.const声明一个只读的常量。一旦声明,常量的值就不能改变,并且一旦声明变量,就必须立即初始化,不能留到以后赋值。
2.对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。 const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变
const names = [ ] ;
names . push ( “Jordan” ) ;
console . log ( names ) ; //添加值到数组中不改变这个索引,正确
names = [ ] ; //修改变量索引到一个新的数组,出错
如果真的想将对象冻结,应该使用Object.freeze方法。
3.const命令声明的常量也是不提升、存在暂时性死区、不可重复声明。