前言:ECMAScript和JavaScript是什么关系?
JavaScript由ECMAScript,BOM,DOM组成,前者是后者的规范,后者是前者的实现
1.let和const命令
1)let用于声明变量,声明的变量是块级作用域
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
2)var声明的变量有变量提升的现象,let声明的变量没有
console.log(foo); //输出undifined
var foo = 2;
console.log(bar); //报错RefrenceError
let bar = 2;
3)暂时性死区
var tmp = 123;
if(true){
tmp = ‘123‘; //referenceError
let tmp;
}
4)不允许重复声明
5)允许在块级作用域中声明函数,声明的行为类似let,在块级作用域之外不可应用
6)do表达式,使得块级作用域可以有返回值
let x = do { let t = f(); t = t * t + 1; }
//x的返回值为(t*t+1)
const命令
const声明一个常量,一旦声明,常量的值不能改变
const实际上保证的不是变量的值不能改动,而是变量指向的那个内存地址不得改动
2.变量的解构赋值
1)数组的解构赋值