1.var、let、const的区别?
区别一:
var不存在块级作用域,而let和const有块级作用域。
解决了es5中两个问题:
1.内层变量可能覆盖外层变量
2.用来计数的循环变量泄露为全局变量
例子:
<script>
function fn(){
for(var i = 0; i < 3; i++){
console.log(i) //本来这个循环后在控制台输出0 1 2
}
console.log(i) //但是,因为var声明的变量没有块级作用域,所以这里还可以输出3
}
fn(); //调用函数
</script>
上面代码输出的结果如下:
注意:块作用域是由{}包括。
区别二:
var存在变量提升,let和const不存在变量提升,即变量只能在声明之后使用,否则会报错。
例子:
//var存在变量提升,let和const不存在变量提升,即变量只能在声明之后使用,否则会报错。
console.log(a)
var a = 1128
输出结果如下:
没有报错,但是也没有得到1128这个值。 所以var存在变量提升。
如何理解?(如下图)
区别三:
var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的变量。
const和let不允许重复声明变量。
例子:
区别四:
var、let是声明变量的,const是声明常量的。
var和let声明的变量可以再次赋值,但是const不可以再次赋值了。
例子: