• es6 中let与const的简析


    1、let

    它的作用类似于var,用来声明变量,但是所声明的变量,只在let命令所在的代码块内有效。

    if(true){
    
        var a = 1;
    
        let b = 2;
    
    }
    
    document.write(a);
    
    document.write(b);  // 报错:ReferenceError: b is not defined

    体会下letvar的作用域范围:

    function f1() {
    
      var a = 8;
    
      let n = 5;
    
      if (true) {
    
          let n = 10;
    
          var a = 20
    
      }
    
      document.write(n); // 5
    
      document.write(a); // 20
    
    }
    
    f1();

    2、let的应用

    for循环的计数器,就很合适使用let命令。

    var a = [];
    
    for (let i = 0; i < 10; i++) {
    
      a[i] = function () {
    
        document.write(i);
    
      };
    
    }
    
    document.write(a[6]()); //6

    如果把let换成var ,将输出10。这是由于let的块级作用域。

    3、const

    a、const 声明的是常量,一旦声明,值将是不可变的。

    const PI = 3.1415;
    
    PI // 3.1415 
    
    PI = 3;
    
    PI // 3.1415 
    
    const PI = 3.1;
    
    PI // 3.1415

    b、const 也具有块级作用域

    if (true) {
    
      const max = 5;
    
    }
    
    document.write(max);  // ReferenceError 常量MAX在此处不可得

    c、const 不能变量提升(必须先声明后使用)

    if (true) {
    
      document.write(MAX); // ReferenceError
    
      const MAX = 5;
    
    }

    d、const 不可重复声明

    var message = "Hello!";
    
    let age = 25;
    
    // 以下两行都会报错
    
    const message = "Goodbye!";
    
    const age = 30;
    
    const 指令指向变量所在的地址,所以对该变量进行属性设置是可行的(未改变变量地址),如果想完全不可变化(包括属性),那么可以使用冻结。
    
    const C1 = {};
    
    C1.a = 1;
    
    document.write(C1.a); // 1
    
    C1 = {};  // 报错  重新赋值,地址改变 
    
    //冻结对象,此时前面用不用const都是一个效果
    
    const C2 = Object.freeze({}); 
    
    C2.a = 1; //Error,对象不可扩展
    
    document.write(C2.a);
  • 相关阅读:
    谢尔排序(缩小增量排序)
    折半插入排序
    插入排序
    选择排序
    冒泡排序
    ul+js模拟select+改进
    ul+js模拟select
    前端面试题
    js数组去重的三种常用方法总结
    使用PHP实现文件上传和多文件上传
  • 原文地址:https://www.cnblogs.com/wangdan0915/p/7798985.html
Copyright © 2020-2023  润新知