前言
本文讲解了var let const 的区别,也是比较重要的知识点,是es6面试题
的常客了,如果本文有哪里错误或需要改进的欢迎评论,然后就是觉得本文章对你有帮助的话就三连支持一下吧,你的支持是我更新的动力。
以下是本篇文章正文内容,可供参考
一、var let const 的共同点
var let const
的共同点都是可以生成变量的
var a1='关'
let a2='注'
const a3='我'
console.log(a1,a2,a3)
可以看到不管使用哪个都是没有问题的。
二、var let const 的区别
区别1
我们都知道在javascript
当中有一个很神奇的东西叫做变量提升或者叫做悬挂声明,那这是什么意思呢?
列如:
使用var
声明变量时 先打印再声明会发生什么呢?
console.log(str)
var str = 1
结果
那我们把var
换成let
进行声明呢?
console.log(str)
let str = 1
然后就报错了,所以证明了 let
是没有变量提升的,const
也是一样没有变量提升的。
区别2
看以下代码
![](/qrcode.jpg)
var a =1
var a =2
console.log(a)
可以看到后者覆盖了前者,使用var
是没有问题的,一个变量可以声明n
多次都是没有问题的。但是如果换成了let
或const
?
let a =1
let a =2
console.log(a)
可以看到会报错了,所以可以得出,var
可以多次声明同一个变量,let``const
不可以多次声明同一个变量。
区别3
好的我来做一个值的修改来看看:
var str = 1
str=2
console.log(str)
let str2 = 1
str2=2
console.log(str2)
const str3 = 1
str3=2
console.log(str3)
可以看到var
let
是没有问题的,而const
就出错了,那是为什么呢?是这样的在es6中var
let
是声明变量的,const
是用来声明常量的,常量就是不经常变换的量。
const
还有一种情况:
const obj={
a:1
}
obj.a=123
console.log(obj)
可以看到没报错,这是因为我修改的不是常量声明的而是对象里面的值,因为a:1
他不是常量所声明的。
我们还可以:
const arr =[1,2,3]
arr[0]='jj'
console.log(arr)
区别4
我们都知道JS当中是没有块级作用域的,那没有块级作用域就会造成一个问题,举个栗子:
if(true){
var str = '123'
}
console.log(str)
这段代码是没有问题的,是因为JS当中除了函数外是没有作用域的,但是如果换成了let
或者const
就会报错由此得出var
声明变量是没有自身的作用域的let
const
声明的变量有自身的作用域。
总结
共同点
var let const
的共同点都是可以生成变量的。
不同点
区别一
var
具有变量提升的机制,let
const
是没有变量提升的机制
区别二
var
可以多次声明同一个变量,let``const
不可以多次声明同一个变量
区别三
var
let
声明的变量可以再次赋值,但const
不可以再次赋值了。
区别四
var
声明变量是没有自身的作用域的
let
const
声明的变量有自身的作用域