十六、ES6
16.1 块级作用域
-
16.2 let关键字
通过let定义的变量 遵循ES6的块级作用域规范
块级作用域
if (true) {var a = 10;let b = 11;console.log(a); // 10console.log(b); // 11}console.log(a); // 10console.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); // 可以输出11let a = 10;let a = 11; // 报错 Uncaught SyntaxError: Identifier 'a' has already been declared
let定义的变量不会自动注册到window身上
var a = 10; // var出来的全局变量会被自动注册成window的属性console.log(window.a); // 10let a = 10;console.log(a); // 10console.log(window.a); // undefinedconsole.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](); // 0arr[1](); // 1arr[2](); // 2arr[3](); // 3arr[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 />```javascriptvar obj = {a: 1,hello: function() {console.log("hello");},world() {console.log("world");}}console.log(obj.a);obj.hello(); // helloobj.world(); // world
