• ES6 随记(1)-- let 与 const


    1. const(声明一个只读的常量)

    这个是很好理解的,且声明时就必须赋值而不能以后再赋,不然会报错。

    而个人认为它最大的用处还是在于 {} 和 [] 上,const 保证了它的内存地址(指针)不变(非数据不可变)。(但这点现在浏览器好像还未统一)

    var TEST = {};
    TEST.xx = 'x';	// 可执行
    TEST = {x: 'x'}; // 重新赋值则不可行

    另外注意,我们推荐常量所用名称最好全为大写字母。

    2. let (申明块级作用域变量)

    var a = [];
    for(let i=0; i<1; i++) {
        a[i] = function(){console.log(i)}
        if (true) {
            let i = 'x';
        }
        console.log(i);  // 打印数字而不是 'x'
    }
    a[0]();  // 使用 let 打印 0,使用 var 打印 5。

    以上即为 let 的典型特征,块级作用域内有效。

    2.5 块级作用域

    怎样才叫一个区块呢,function / for / if,以及哪怕两个中括号中间的都是一个独立的块级。

    注意,同一区块内不能出现相同变量名的声明,否则会报错。

    内层可访问外层块级,外层不能访问内层新申明的变量,因此 IIFE 写法不再有必要:

    // IIFE 写法
    (function () {
        var a = 'x';
    }());
    
    // 块级作用域写法
    {
        let a = 'x';
    }
    

    此外,let 和 const 不同于 var 还在于,var 会优先声明,而 ES6 不能再这样做了。

    a = 'x';
    var a;
    console.log(a); // x
    
    b = 'x';
    let b ;
    console.log(b); // 报错
    

    另外,函数声明在 ES6 的块级作用域是个奇葩,而且浏览器对此的实现还没有统一,不做讨论

    // 浏览器的 ES6 环境
    function fn() { console.log('I am outside!'); }
    (function () {
        if (false) {
            function fn() { console.log('I am inside!'); }
        }
        f();  // f is not a function
    }());

    以上,便是 let 和 const 的说明,

    在此强烈推荐使用这两个命令,它们有着 var 无法拥有的特性,

    应当用 let 完全取代 var;无需重新赋值的对象和数组多使用 const。

    本文部分转载自 阮一峰 的 ECMAScript 6 入门

  • 相关阅读:
    Euraka适合初学者的简单小demo
    springboot中常用的依赖
    SpringBoot的入门程序
    spring-data-solr查询
    SpringBoot整合Redis
    SpringBoot整合MyBatis
    使用swagger2生成文档
    SpringBoot整合Spring Data JPA
    SpringBoot构建RESTful API
    SpringBoot属性配置
  • 原文地址:https://www.cnblogs.com/foreverZ/p/6655101.html
Copyright © 2020-2023  润新知