十六、ES6

16.1 块级作用域

  • ES6中的块级作用域 指的是 {} 之间可以生成作用域

    16.2 let关键字

    通过let定义的变量 遵循ES6的块级作用域规范

  • 块级作用域

    1. if (true) {
    2. var a = 10;
    3. let b = 11;
    4. console.log(a); // 10
    5. console.log(b); // 11
    6. }
    7. console.log(a); // 10
    8. console.log(b); // 报错
  • 没有变量声明的提升

    1. console.log(a); // undefined 因为声明提升
    2. var a = 10;
    3. console.log(b); // 报错
    4. let b = 11;
    5. console.log(b);
  • 不可以重复定义同名变量

    1. var a = 10;
    2. var a = 11;
    3. console.log(a); // 可以输出11
    4. let a = 10;
    5. let a = 11; // 报错 Uncaught SyntaxError: Identifier 'a' has already been declared
  • let定义的变量不会自动注册到window身上

    1. var a = 10; // var出来的全局变量会被自动注册成window的属性
    2. console.log(window.a); // 10
    3. let a = 10;
    4. console.log(a); // 10
    5. console.log(window.a); // undefined
    6. console.log(a); // 在不声明a时 会报错
    7. console.log(window.a); // 有就用 没有就undefined
  • for循环的不同

    1. var arr = new Array(5).fill(0);
    2. for (let i = 0; i < arr.length; i++) {
    3. arr[i] = function() {
    4. console.log(i);
    5. }
    6. }
    7. // 如果上面定义循环变量i时使用的是var 则下面代码执行时都输出5 如果用let定义变量 则如下执行
    8. arr[0](); // 0
    9. arr[1](); // 1
    10. arr[2](); // 2
    11. arr[3](); // 3
    12. arr[4](); // 4

    16.3 const关键字

    用于定义常量 命名规范: 推荐全部大写 如果出现了单词需要使用_进行分割ex: const HELLO_WORLD = 10;

  • 值一旦被赋值 不能使用等号改

    1. const A = 10;
    2. A = 11; // 报错: Uncaught TypeError: Assignment to constant variable.
    3. /* 如果常量保存的是引用类型 可以使用方括号语法和点语法进行属性的修改 */
    4. const OBJ = {};
    5. OBJ = 123; // 会报错
    6. OBJ["hello"] = 123;

    注:const定义的常量也遵守块级作用域 也没有声明提升 也不会注册到window身上 千万不要使用const来定义循环变量

16.4 对象的定义简化

  1. ES6 针对对象的定义 进行了语法上的简化
  • 如果对象的属性名和属性值一致 则可以只使用一个

    1. /* 以前的定义变量 */
    2. var color = "red";
    3. var obj = {
    4. color: color
    5. }
    6. // 简化后
    7. var obj = {
    8. color
    9. }
    10. console.log(obj);
  • 现在可以在对象属性定义时通过方括号进行开辟JS执行环境
    ```javascript var he = “he”; var llo = “world”; var obj = { hello: “”,

  1. [he + llo]: ""

}

  1. - 定义方法时 可以省略 : function<br />
  2. ```javascript
  3. var obj = {
  4. a: 1,
  5. hello: function() {
  6. console.log("hello");
  7. },
  8. world() {
  9. console.log("world");
  10. }
  11. }
  12. console.log(obj.a);
  13. obj.hello(); // hello
  14. obj.world(); // world