const必须初始化,而且不能更改var仅在function是局部变量,其余都为全局变量();let一直充当局部变量,即便是在IF中,外界也不能访问 function a (){
var x = 10
console.log(x)
}
a()
console.log(x) //这里为空
函数变量提升,提升也就是把定义的放在一段代码的最开头
var 的声明,存在变量提升。let 的声明,不存在变量提升。const 的声明,不存在变量提升。
for循环中,var定义相当于在for这一片区是全局的,所以值是最后一个;let是每个独立分开的,所以值不同
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[2]();
var b = [];
for (let k = 0; k < 10; k++) {
b[k] = function () {
console.log(k);
};
}
b[2]();
原因:
i是var声明的,在全局范围内都有效,console.log(i),里面的i指向的就是全局的i,所以最后输出的是10。。
k是let声明的,只在本轮循环局部有效,console.log(k),每一次for循环的k都为新变量,所以最后输出的是2。
var可以重复申明,let不可以