声明操作符的作用域
var 声明的变量都会成为包含它的函数的局部变量,当函数执行完毕后,变量会被销毁
let const 声明的变量会成为包含它的代码块的局部变量。
声明提升
使用var声明变量,即将该变量提升到包含它的函数的作用域顶部,先使用再声明不会报错,但返回undefined,多次使用var声明同一个变量会先合并为一次声明,在提升到包含它的函数的作用域顶部
而let const 声明变量,不会将变量提升到包含它的代码块顶部,先使用再声明会报错,而且仅能声明一次,多次声明报错
如果先使用var声明a变量,再使用let或者const去声明a会报错,因为这两个声明操作符声明的变量并不是不同类型的变量,操作符只能指出变量在相关作用域中如何存在。
条件声明,由于let const声明的变量尽在包含它的代码块中有效,无法判断在全局作用域中是否声明过该变量,故不能依赖条件声明模式。
const声明变量,必须有初始值,而且声明的变量如果是原始值,则不能被修改