在ES5中,javascript只有两种作用域:全局作用域与局部作用域,但在ES6中新增了一个块级作用域。
let命令
let命令,用来声明变量,let声明的变量只在let命令所在的代码块{}内有效,在{}之外不能访问。
{
var a = 10;
let b = 11;
}
console.log(a); //10
console.log(b); //报错
var i = 5;
for (var i = 0; i < 10; i++) {
//代码
}
console.log(i); //10
let i = 5;
for (let i = 0; i < 10; i++) {
//代码
}
console.log(i); //5
在相同的作用域或块级作用域中,let关键字声明的变量不能重置
let a = 2;
let a = 3; //不合法
let a = 2;
{
let a = 3;//合法
}
const命令
const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改
const PI = 3.141592653589793;
PI = 3.14; // 报错
PI = PI + 10; // 报错
相同点与不同点
const定义常量与使用let 定义的变量相似:
二者都是块级作用域
都不能和它所在作用域内的其他变量或函数拥有相同的名称
两者还有以下两点区别:
const声明的常量必须初始化,而let声明的变量不用
const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。