• ES6(一) let and const


    1、let 用于变量声明,仅在块级作用域内有效。

         ES6新增了块级作用域,在ES5中没有块级作用域这个概念。

           {
                let a = 10;
                var b = 1;
            }
            console.log(b); //1
            console.log(a); //undefined

    2使用let 避免闭包的形成,每一次循环的i其实都是一个新的变量

       如下:如果使用 "var i=0",则输出的结果是10.

         var arr = [];
            for (let i = 0; i < 10; i++) {
                arr[i] = function () {
                    console.log(i);
                }
            }
    
            arr[6]();

    3、不存在变量的提升,必须声明后再使用

     console.log(foo); //ReferenceError: foo is not defined
     let foo='test';

    4、暂时性死区,只要块级作用域存在let命令,它所声明的变量就绑定这个区域,不再受外部影响

        即 在代码块内,使用let声明变量之前,该变量都是不可用额,称为 temporal dead zone.

          if (true) {
                 temp='abc';
                 console.log(temp); //ReferenceError: temp is not defined
    
                let temp;
                console.log(temp);
            }

    5、不允许重复声明,不能再函数内部重新声明参数,但如果另开辟一个块级作用域除外。

         function func(arg) {
                let arg = 222;//error
                {
                    let arg = 3333;//ok
                }
            }

    6、const 声明一个只读的常量,一旦声明,必须初始化。

         (一):作用域与let命令相同,只在声明的块级作用域内有效

          (二):不存在作用域提升,同样存在暂时性死区,只能在声明位置后使用

          (三):不可重复声明

    console.log(MAX);//error
    const MAX = 5;

     

    7、对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址

         const只是保证变量名指向的地址不变,并不保证改地址的数据不变;

         如果不希望改变对象属性,则应该使用Object.freeze();

          const person = {};
    
            person.name = 'jackey';
            person={}; //error
    
            const readyOnlyPerson = Object.freeze({});
    
            readyOnlyPerson.name = 'jack';//虽然不报错,但是输出的值是 undefined

    8、let、const、class 命令声明的全局变量,不属于全局对象的属性。
         let global='test global';
         console.log(window.global);//undefined

     

  • 相关阅读:
    数据库表的常见设计规则总结
    关于记录log日志的几种方法
    lambda表达式
    java8之stream和lambda表达式
    Andriod底层第三课-----启动流程2(Zygote)
    Andriod底层第三课---启动流程
    Andriod底层第二课-----编译系统
    Andriod 底层第一课----JNI
    Andriod 第八课----传感器
    Andriod第七课----ContentProvide
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/6782270.html
Copyright © 2020-2023  润新知