var,let,const的区别
之前在前段交流群中遇到有同学问var,let与const有啥区别,自己始终记不住,其实每个大的知识点都是由一些小知识点积累起来的,今天我也要记录一下,var,let,const的区别,以便日后巩固知新,也便于大家学习。
let和const是ES6中新增加的两个用来声明变量的关键字,在没学习ES6之前,可能更多的用var来声明一个变量,例如 var name = xiaoming,在增加let与const之后,这三个用来声明变量的关键字一定是有区别的,那么今天我们就来讨论一下三者之间到底都有什么区别。
先看一段代码
{
var a = 1;
let b = 9;
}
console.log(a)
console.log(b)
输出结果为:
我们会发现,上述这段代码只输出了a,输出b则报错,这就涉及到块级作用域的问题。
var声明的变量,作用域为函数体的全部,而let声明的变量,只作用在块级作用域里。
如果将console.log(b)放在花括号里面,则能正确的输出,这也就是let与var的一共不同点:
1.var 声明的变量不受块级作用域的影响
2.let声明的变量只作用在块级作用域里,const也是如此
接着上图:
从上图我们可以得出结论:
1.使用let或者const声明的变量,不能再重新被声明
接着上图:
由图得出结论:
当使用var声明变量时,
console.log(data)
var data = 99
这段代码在运行时会转化为:
var data
console.log(data)
data = 99
所以才会输出:undefined
let与const声明的变量则不会出现上述情况,这就是因为
let 和 const不存在变量提升
上图:
得出结论:
const声明后不能被修改,但是let可以
得出结论:
常量为引用类型的时候,可以修改该引用类型,const只能保证声明的常量所指向的地址不变,但是不能保证 地址上的值不变
以上这些就是对var,let,const的简单总结!