var、let和const的区别
1、var
- var 是函数作用域
var操作符定义的变量会成为包含它的函数的局部变量,那就意味着该在函数退出时var定义的局部变量会被销毁。
举个例子:
function fn() {
var name = 20;
console.log(var); //20
}
fn();
console.log(var); //报错
有一点需要注意,如果在定义局部变量的时候省略了var操作符,该变量会变成全局变量(不推荐这么做,比较难维护,严格模式下会抛出RenferenceError)
function test() {
age = 26;//全局变量
}
test();
console.log(age);//26
2.var 声明提升
使用var操作符声明的变量会自动提升到函数作用域的顶部
function foo() {
console.log(name);
var name ="Tom";
}
foo();//undefined
//相当于
function foo() {
var name;
console.log(name);
name ="Tom";
}
foo();//undefined
2、let
- let是块级作用域
if(true) {
var name = "Tom";
console.log(name);//Tom
}
console.log(name);//RefernceError
- let 声明的变量不会在作用域中被提升
3、const
const基本上同let一样,主要区别就是const在声明变量的同时初始化变量,且尝试修改const声明的变量会导致运行错误
- const是块级作用域
- 不允许被重复声明
- 不允许修改值