var/let/const

var/let/const
Breezlivar/let/const区分
作用域
var 和 let 的作用域规则一样
1 | 函数外,是全局执行上下文,函数里,是当前函数执行上下文。//声明的变量的作用域只能是全局或者整个函数块的。 |
重复声明
var 允许,let/const不允许
1 | function test() { |
let是块级作用域
const只能在声明它们的块级作用域中访问
const/let在块级作用域外无法访问内部变量!
1 | if(true){ |
绑定全局变量
在全局环境声明变量,var会在全局对象里新建一个属性,let/const不会
1 | var foo = 'global' |
此时let定义的变量实际在test 函数的作用域链上
变量提升与暂存死区
上述代码的例子中
1 | var例子就是变量提升,const/let的报错就是暂时性死区 |
代码的执行原理
1 | 创建->初始化->赋值 |
1 | var 声明的变量在执行上下文创建阶段就会被「创建」和「初始化」,因此对于执行阶段来说,可以在声明之前使用。 |
let 与 const 异同
1 | 唯一区别就在于 const 声明的是一个只读变量,声明之后不允许改变其值。 |