let和var的区别
在JavaScript中,定义变量的关键词一般用var,但还有一种定义变量的关键词叫let。两者的作用域范围不一样,我们可以将var理解为定义的是一个全局变量,而let定义的是一个局部变量。故let常用于函数体中,使得变量的作用域仅限于函数体内。下面通过一小段代码展示他们的作用范围。
a();
function a() {
let a = 'dd';
var b = 10;
alert(b);
}
alert(a); // 报错,b is not defined
alert(b);//成功打印10
可以看到,函数体内用var定义的变量是一个全局内,故可在函数外被打印;而let定义的变量进作用于函数体内,故在函数体外被打印回报出a没有定义的错误。
下面再深入介绍下二者的区别:
- 声名变量的提升区别:
var声名的变量在解析时会初始化变量,并赋予undefined,但let定义的变量在解析时不会被初始化。
alert(a);//打印undefined
alert(b);//报出未定义的错误
var a = 1;
let b = 2;
alert(a);//打印1
alert(b);//打印2
- 重复声名变量的区别
var可以重复声明一个变量,但let在一个作用域里不能重复声名同一个变量,不然会报错。
var a = 1;
var a = 5;
let b = 2;
let b = 8; //重复声名会报错,因为b变量已被定义
alert(a); //打印5
alert(b);