const, var, let的区别
先比较const和let, 它们的区别只在于const是常量, 不可改变; let是可变的.
1. var声明的变量会污染全局.
js
const a = 1
console.log(window.a) // 这会打印出1, 如果改成let就是undefined
要注意的是, var和let声明的变量都可以跨标签使用.
html
<script>
var a = 1
</script>
<script>
console.log(a) // 打印出1
</script>
html
<script>
let a = 1
</script>
<script>
console.log(a) // 打印出1
</script>
2. 作用域
var类型变量没有块级作用域
html
<script>
if (true) {
var a = 1
}
console.log(a)
</script>
如果是let的话就会报错.
3. 重复声明
js
var a = 1
console.log(a) // 打印1
var a = 2
console.log(a) // 打印2
js
let a = 1; // 报错, 什么都不会打印
console.log(a);
let a = 2;
console.log(a);
4. 暂时性死区(TDZ)
不管是var还是let又或是const, 在声明时都会有提升. 比如这个
html
<script>
console.log(a)
let a = 1
</script>
这会将let a = 1;
提升到第一句, 但是在对于const和let, 开头到声明语句之间不能使用变量a, 这就是暂时性死区. 在暂时性死区里调用a就会报错.
但是使用var是不会报错的, 只会打印一个undefined.