ES6介绍
ES6,全称为ECMAScript 2015,是JavaScript语言的一个重大更新版本。
这个版本带来了许多新特性和改进,极大地增强了JavaScript的功能和易用性。ES6的引入标志着JavaScript从一门主要用于浏览器端脚本的语言,逐渐发展成为一门能够胜任复杂应用开发的强大语言。
ES6之let及const命令
新增了 let 和 const 命令,用来声明变量。
let命令
1、let声明的变量只在它所在的代码块有效。
{
let a = 1;
var b = 2;
}
console.log(a)
ReferenceError: a is not defined
console.log(b)
1
let 声明的变量只会在代码块内部有效,外部使用会抛出ReferenceError异常 。
2、同一个作用域不可使用 let 重复声明同一个变量
function testFunction() {
let a = 1;
var a = 2;
}
//报错 SyntaxError: Identifier 'a' has already been declared
function testFunction() {
let b = 1;
let b = 2;
}
//报错 SyntaxError: Identifier 'b' has already been declared
报错表示 变量a 、b已经被声明了, 不能重复被声明。
同时说明let声明的变量名, 不管是let还是var在同一个作用于中都不能再次被声明。
3、let声明的变量不存在变量提升, var声明的变量会提升到作用域的最顶部
console.log(a); // 输出 undefined,而不是报错
var a = 1;
console.log(a); // 输出 1
console.log(b); // 输出 ReferenceError: Cannot access 'b' before initialization
let b = 1;
console.log(b); // 输出 1
报错表示 let 声明的变量,只能在声明之后使用, 不声明就使用会抛出错误 ReferenceError
var声明的变量会被提升到作用域的顶部, 但是值为undefined。
4、“暂时性死区”
在JavaScript中,当使用let和const关键字声明变量时,会存在一个“暂时性死区”。这意味着,从代码块的开始到变量被声明的位置之间,该变量是处于一个不能访问的状态,即它处于一个“死区”内。如果在这个“死区”内尝试访问该变量,JavaScript会抛出一个引用错误(ReferenceError),指出该变量尚未初始化,因此不能被访问。
console.log(x); // ReferenceError: x is not defined(在严格模式下)或x是undefined(在非严格模式下,但这是由于变量提升,与TDZ无关)
let x = 2;
const
1、const用来声明一个只读的常量。一旦声明,常量的值就不能改变
const b = 123;
b = 456; // TypeError: Assignment to constant variable.
修改b的值,会抛出 TypeError
但是如果常量是一个对象或者数组(特殊的对象)等引用类型的常量时,引用地址不会变,但可修改对象或数组内的值,虽然可以修改值,但是不能修改其类型,比如修改为int类型,就同样会报错。
const obj= {key: "value"};
obj.key = "value1"; // 这是允许的
obj= 123; // TypeError: Assignment to constant variable. 这种会报错
obj= {key: "value2"}; // TypeError: Assignment to constant variable. 这种也会报错
赋值为一个另外一个对象的时候,相当于是修改引用地址,会报错。
2、只在声明所在的块级作用域内有效 同于let
3、不存在变量提升 同于let
4、不存在变量提升 同于let
5、同样存在暂时性死区 同于let
const有let所有的特性,另外还包含一个只能声明一个只读常量,常量不可更改,声明的是引用类型的数据时候,可修改其值。