let and const
ES6 新增的两个重要的关键字:let和const
let声明的变量只在let命令所在的代码块内生效。
const声明的是只读变量,一旦声明,常量的值就不能改变。
JavaScript在ES6之前只有两种作用域:全局变量与函数内的局部变量
JavaScript块级作用域(Block Scope)
ES6之前,没有块级作用域的概念。
let关键字可以实现块级作用域。
{
var x = 2;
}
//这里可以使用x变量
{
let x = 2;
}
//这里不能使用x变量
var i = 5;
for (var i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 10
let i = 5;
for (let i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 5
第一个实例中,使用了var关键字,它声明的变量是全局的,包括循环体内循环体外;
第二个实例中,使用了let关键字,它声明的变量的作用域只在循环体内。
var和let关键字在局部变量和全局变量的应用类似
在相同的作用域或块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量:
var x = 2; // 合法
let x = 3; // 不合法
{
var x = 4; // 合法
let x = 5 // 不合法
}
在相同的作用域或块级作用域中,不能使用 let 关键字来重置 let 关键字声明的变量
let x = 2; // 合法
let x = 3; // 不合法
{
let x = 4; // 合法
let x = 5; // 不合法
}
let 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:
let x = 2; // 合法
{
let x = 3; // 合法
}
{
let x = 4; // 合法
}
const关键字
const在声明的时候必须进行初始化,且以但初始化值就不可再更改(final?)
const定义常量与使用let 定义的变量相似:
二者都是块级作用域
都不能和它所在作用域内的其他变量或函数拥有相同的名称
两者还有以下两点区别:
const声明的常量必须初始化,而let声明的变量不用
const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。
const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
但不能对常量对象重新赋值