十六、ES6
16.1 块级作用域
-
16.2 let关键字
通过let定义的变量 遵循ES6的块级作用域规范
块级作用域
if (true) {
var a = 10;
let b = 11;
console.log(a); // 10
console.log(b); // 11
}
console.log(a); // 10
console.log(b); // 报错
没有变量声明的提升
console.log(a); // undefined 因为声明提升
var a = 10;
console.log(b); // 报错
let b = 11;
console.log(b);
不可以重复定义同名变量
var a = 10;
var a = 11;
console.log(a); // 可以输出11
let a = 10;
let a = 11; // 报错 Uncaught SyntaxError: Identifier 'a' has already been declared
let定义的变量不会自动注册到window身上
var a = 10; // var出来的全局变量会被自动注册成window的属性
console.log(window.a); // 10
let a = 10;
console.log(a); // 10
console.log(window.a); // undefined
console.log(a); // 在不声明a时 会报错
console.log(window.a); // 有就用 没有就undefined
for循环的不同
var arr = new Array(5).fill(0);
for (let i = 0; i < arr.length; i++) {
arr[i] = function() {
console.log(i);
}
}
// 如果上面定义循环变量i时使用的是var 则下面代码执行时都输出5 如果用let定义变量 则如下执行
arr[0](); // 0
arr[1](); // 1
arr[2](); // 2
arr[3](); // 3
arr[4](); // 4
16.3 const关键字
用于定义常量 命名规范: 推荐全部大写 如果出现了单词需要使用_进行分割ex: const HELLO_WORLD = 10;
值一旦被赋值 不能使用等号改
const A = 10;
A = 11; // 报错: Uncaught TypeError: Assignment to constant variable.
/* 如果常量保存的是引用类型 可以使用方括号语法和点语法进行属性的修改 */
const OBJ = {};
OBJ = 123; // 会报错
OBJ["hello"] = 123;
注:const定义的常量也遵守块级作用域 也没有声明提升 也不会注册到window身上 千万不要使用const来定义循环变量
16.4 对象的定义简化
ES6中 针对对象的定义 进行了语法上的简化
如果对象的属性名和属性值一致 则可以只使用一个
/* 以前的定义变量 */
var color = "red";
var obj = {
color: color
}
// 简化后
var obj = {
color
}
console.log(obj);
现在可以在对象属性定义时通过方括号进行开辟JS执行环境
```javascript var he = “he”; var llo = “world”; var obj = { hello: “”,
[he + llo]: ""
}
- 定义方法时 可以省略 : function<br />
```javascript
var obj = {
a: 1,
hello: function() {
console.log("hello");
},
world() {
console.log("world");
}
}
console.log(obj.a);
obj.hello(); // hello
obj.world(); // world