1. var let const 区别
var
1. 可以被修改和重新声明
2. 当在最外层声明时作用域为全局 函数内部声明时 作用域为局部
3. 变量提升:所有变量和函数声明会移到作用域的顶部 并初始化赋值 undefined //如在声明前使用var声明的变量 值为undefined
问题:var a =“1” var b = “2” if(b=“2”){var a =“3”} a会被重新声明 ,如果if里面去掉var声明则是重新赋值
(如下图)
此问题只有var有;let和const 均无此问题
let
1. 可以被修改 不能重新声明
2. 作用域是块级的 即{ } 解决了var的问题
3. 变量提升:所有变量和函数声明也会移到作用域的顶部 但不会对值进行初始化 //如果在声明前使用let 变量会reference error
const
1. 作用域和let一样 都为块级 { }
2. 不能被修改并且不能被重新声明 但是可以更新对象的属性(如果声明的是对象)
3. 变量提升和let一样 都不会初始化值
4.const变量 必须在声明时赋值
总结:1.var声明是全局作用域或函数作用域,而let和const是块作用域。
2.var变量可以在其范围内更新和重新声明; let变量可以被更新但不能重新声明;const变量既不能更新也不能重新声明。
3.它们都被提升到其作用域的顶端。但是,虽然使用变量undefined初始化了var变量,但未初始化let和const变量。(当引用在声明后面的时候let变量也会被赋值undefined)
4.可以在不初始化的情况下声明var和let,但是在声明期间必须初始化const
图一 重新声明
图二 重新赋值(更新)