• let、const


    1、ECMAScript 6

    javascript组成: ECMAScript、BOM、DOM

    ES6指的是ECMAScript的版本,2015年6月正式通过

    2、let命令

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

       var b = new Array()
       for (let i = 0; i < 3; i++) {
           b[i] = i
       }
       console.log(i)

    报错:Uncaught ReferenceError: i is not defined

    但是,换成var会正常输出 3

    js作用域,不像其他大部分语言都是块作用域,它是函数作用域,只有函数里声明的变量才是局部变量,外部不能引用,而if、for等语句块中的变量,从声明开始直至销毁都是全局的。因此,有些地方使用var会觉得有点“坑”,增加了let命令之后,相当于给js增加了块级作用域,可以避免

    var a = new Array()
       for(var i=0;i<6;i++){
        a[i] = function(){
            console.log(i)
        }
       }
    a[3]();
    
    //输出  6

    上述代码中,i使用var声明的,并且是在语句块中,所以它是全局变量,每一次循环,变量的i值都会发生改变,而循环内的i指向的也是全局变量i,而执完循环体后,i的值为6,所以最后console.log(i)的输出也是6  

    var a = new Array()
       for(let i=0;i<6;i++){
        a[i] = function(){
            console.log(i)
        }
       }
       a[3]()
    
    //输出3

    上述代码唯一的区别就是,i使用let声明。由于i是在块内起作用,也就是本次的循环中有效,所以每一次循环都会开辟一个新的地址存放,并且,js引擎会记住上一次的值,初始化本轮的变量i时,就会使用上一次i的值。所以最终输出的是 3

    let无变量提升,也就是必须先声明再使用,否则会报错。ES6规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量从一开始就形成了封闭作用域。

    let不允许在相同作用域内,重复声明同一个变量

    3、const命令

    const声明一个只读的常量。一旦声明,常量的值就不能改变。其本质是变量指向的地址不允许改动,针对数字、字符串、布尔值,值就保存在变量指向的内存地址,因此等同于常量,但对于复合类型的数据,主要是对象和数组,变量指向的内存地址是指针,其数据结构可以变。所以将对象或数组声明为const需要注意,其内容不一定是不变的。

    const a;
    a = 11;
    console.log(a)
    //输出报错 Uncaught SyntaxError: Missing initializer in const declaration

    const常量,声明后必须赋值,并且对于简单的数据类型是不可以更改,但对于复杂数据类型,可以增减内容,但是不能改变地址

    const a = 11;
    a = 12;
    console.log(a)
    //Uncaught TypeError: Assignment to constant variable.
    
    const b = {m:33}
    b.n = 22
    console.log(b)
    // {m: 33, n: 22}

      const c = [1,2,3,4];
      let b = [1,2,3,4];
      c = b;
      console.log(c)

      // Uncaught TypeError: Assignment to constant variable.

  • 相关阅读:
    %
    【收藏】Javascript调用后台代码的方法
    C++Builder2010中配置OpenCV2.2
    【收藏】Visual studio 2008 && 2010 快捷键大全
    队列的练习
    哈希表
    poj 3750 链表
    C/C++内存存储 mark在此
    二叉树,深搜,广搜
    链表的练习
  • 原文地址:https://www.cnblogs.com/tiantianxiangshang33/p/7365687.html
Copyright © 2020-2023  润新知