JS块级别作用域(Block Scope)
使用var关键字声明的变量不具有块级作用域的特性,它在{}外依然能被访问到
{
var x = 2;
}
在 ES6 之前,是没有块级作用域的概念的。
ES6 可以使用 let 关键字来实现块级作用域。
let 声明的变量只在 let 命令所在的代码块{}内有效,在{}之外不能访问。
{
let x = 2;
}
// 这里不能使用 x 变量
const关键字
用于声明一个或者多个常量,声明时必须进行初始化,且初始化后值不可再修改。、
const定义常量与使用let定义的变量相似:
二者都是块级作用域
都不能和它所在作用域内的其他变量或函数拥有相同的名称
两者还有以下两点区别:
const声明的常量必须初始化,而
let声明的变量不用
const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。
并非真正的常量
const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:
实例
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";