var、let、const的区别
var
声明变量的时候存在声明提升
什么是声明提升?
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。1
2console.log(a) //undefined
var a = 1作用域范围是整个函数,不存在块级作用域
1
2
3
4
5
6function test() {
if(1) {
var a = 1
}
console.log(a) // 1
}同一作用域下可以声明同名变量
1
2
3var a = 1
var a = 2
console.log(a) // 2
let
不存在声明提升
1
2console.log(a)//Cannot access 'a' before initialization
let a = 1作用域是块级作用域
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问,而var可以跨块访问
块级作用域:即在 {}花括号内的域,由 { }包括,比如if {}块、for () {}块。 函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的。
1
2
3
4
5
6function test() {
if(1) {
let a = 1
}
console.log(a) // a is not defined
}同一作用域下不能声明同名变量
1
2let a = 1
let a = 2 //Identifier 'a' has already been declared
const
不存在声明提升
1
2console.log(a)//Cannot access 'a' before initialization
const a = 1作用域是块级作用域
1
2
3
4
5
6function test() {
if(1) {
const a = 1
}
console.log(a) // a is not defined
}同一作用域下不能声明同名变量
1
2const a = 1
const a = 2 //Identifier 'a' has already been declared初始化时必须赋值,并且赋值后无法修改(引用类型可以修改内部数据)
1
2
3
4
5
6
7
8const a // Missing initializer in const declaration
const a = 1
a = 2 // Assignment to constant variable
const a = {count:0}
a.count = 1
console.log(a) // {count: 1}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 wn244的个人博客!
