因为ES6之前是没有块级作用域的,只有全局作用域和函数作用域,所以ES6新增了let和const两个关键字来实现块级作用域
使用var声明变量的时候,大括号{}外面能访问到括号里面使用的var,因为此时内外都处在全局作用域中
但是使用let和const声明变量可以实现块级作用域,所以括号内外不再同一作用域中,因此括号外面不能访问里面
例1:
{ var x = 2; }
//此处可以访问到x
//但是如果使用let或const声明变量
{
let y = 1;
}
//此处不可以访问y
{
const z = 1;
}
//此处不可以访问z
例2:
var x = 1; //x为1
{
let x = 2; //x为2
}
//x为1,块中声明的变量不会影响块外
在同一作用域中,var、let、const三者之间不能声明同一变量,
且let和const也不能重复声明相同变量
例3:
var x = 1;
let x = 2; //不允许
const y = 3; //不允许
例4:
let x = 1;
let x =2; //不允许
const y = 1;
const y = 2; //不允许
let与const的区别在于const必须在声明时赋值,且之后不能改变
{
let x = 1;
x = 2;
// x=2
}
{
const y = 1;
// y=1
}
{
const y = 1;//此处必须初始化
y = 2; //出错,不能更改
}
ps:通过var声明的变量会提升到顶端,let和const则不会
原文:https://www.cnblogs.com/kusaki/p/11291167.html