ES5包括之前都是用var来声明,ES6出来后新增了let和const两种声明用法
var声明
- 只有在当前函数下声明的变量有效,包括代码块和{};不能跨函数访问;
- 不论是全局作用域还是局部作用域中,使用var声明的变量,都会被提升到作用的的最顶部,即变量提升;
- var在同一作用域中声明同一个变量,后面会覆盖前面;
- var定义的变量不初始化输出undefined。
let
- let是块级作用域,只在本代码块中有效,不能跨块访问,也不能跨函数访问;
- 如果在同一个作用域中某个变量已经存在,再次使用let关键字声明的话会报错;
- let定义的变量不初始化输出undefined。
const
- const是块级作用域,只在本代码块中有效,不能跨块访问,也不能跨函数访问;
- const声明指的是常量,常量一旦被定义就不能修改(此处有瑕疵,后面解释);
- 常量定义必须初始化,不初始化会报错;
- 在const一个对象时,里面的值是可以修改的,但不可以改变整个对象,即不能修改对象的指针。