变量
提问
- 声明变量的方式
- 有什么区别
声明变量
声明变量的方式有三种,分别是var
、let
、const
。
其中let
、const
是es6
新增的变量声明方式。
var
声明的变量的作用域是它当前执行的上下文中,并且存在变量提升
function fn() {
console.log(a)
var a = 1
console.log(a)
}
fn()
相当于
function fn() {
var a
console.log(a) // undefined
a = 1
console.log(a) // 1
}
fn()
并且在可以重复声明同一变量,在该声明的上下文中不会丢失其值。通过var声明的全局变量会作为窗口对象的属性。
let
声明的变量是块级作用域,不存在变量提升,并存在暂时死区,不允许在同一块级作用域重复声明。
function fn() {
console.log(a) // ReferenceError: a is not defined
let a = 1
let a = 2 // TypeError thrown
console.log(a)
}
fn()
区别
const
声明一个常量,其作用域可以是全局或者是本地声明的块级作用域,与var
变量不同,全局常量不会变为窗口对象的属性。
常量必须在声明的同时初始化。同时声明创建的值是一个只读引用,但不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。
如果引用内容是对象的情况下,则可以改变对象内容,除非使用Object.freeze()
方法冻结对象。const
声明常量同样存在暂时死区。