在js中,var、let、const都有声明变量的作用,但是这三者之间是有一定的区别的
var
1. var 声明的变量会进行声明的提升(只提升声明,不提升赋值)
console.log(age);
var age=20
// 以上代码可以做如下解析:
var age // 声明,没有赋值,值默认是undefined
console.log(age) // undefined 因为age已声明未赋值
var age=20
复制代码
2. var 声明的变量没有块级作用域的概念(指结构块、循环结构、分支结构等…不是指函数),它会挂载到全局windows
if (1) {
var age = 20
}
console.log(age) // 20 因为挂载到全局,所以块里面也生效
console.log(window)
复制代码
3. var 允许声明同名变量,后面的会将前面覆盖
var age = 20
var age = 30
console.log(age) // 30
复制代码
let
1. let 声明的变量不会进行任何的提升,一定要先声明赋值再使用
console.log(age) // Cannot access 'age' before initialization
let age = 20
复制代码
2. let 声明的变量有块级作用域,作用域是当前变量所有的结构块{}
有效作用域:从定义这个变量开始到它所在 } 结束
if (1) {
console.log(age) // Cannot access 'age' before initialization
let age = 20
console.log(age)
}
console.log(age) // age is not defined
复制代码
3. let 不能重复声明变量
let age = 20
let age = 30
console.log(age) // Identifier 'age' has already been declared
复制代码
暂时性死区
暂时性死区:指的是变量在作用域内已经存在(即已经被 let/const 声明),但仍未被赋值而无法使用,那么在变量被声明之前的瞬间称为暂时性死区
const
1. 使用 const 声明的是常量
常量:指的是是一旦定义完就不能修改的值
2. 使用 const 声明的常量在定义的同时就要赋值,且不能改动
const PI = 3.14
PI = 3.16 // 报错 Assignment to constant variable
console.log(PI)
复制代码
const 和 let
const 和 let 从限制上来说还是比较近似的,和 let 一样,const 也是只在当前代码块有效,也不能在当前的作用域当中重复声明同一变量,也没有变量提升
总结
- var 声明的变量作用域是全局,let 和 const 声明的变量作用域是块作用域
- var 声明的变量会有声明提升,let 和 const 没有,且有暂时性死区
- var 可以重复声明变量,let 和 const则不行
- const 和 let 的使用上比较相似,最大区别在于 const 声明的变量不能被修改
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END