在ES6以前的版本中,是通过var来声明变量的,存在以下缺点:
- 可以重复声明
- 不能限制修改(没有常量的概念)
- 没有块级作用域
//如果是var,是可以重复声明变量的
var a = 1
var a = 4
//这个没有问题
//使用let const 是不可以的
let a = 1
let a = 2
// 报错 Identifier 'a' has already been declared
//const 同上,不能重复声明
//const声明的常量不能修改
const PI = 3.14
PI = 2 //报错 Assignment to constant variable.
//块级作用域
if(true){
var a = 1
}
console.log(a) // 1
//var 没有块级的作用域,上面的语句可以执行
if(true){
let a = 1
}
console.log(a) // a is not defined a在这里是不能访问的