zoukankan      html  css  js  c++  java
  • ES6 let 和 const

    ES6新增加了两个重要的 JavaScript 关键字: let 和 const。

    let 声明的变量只在 let 命令所在的代码块内有效。let实际上为 JavaScript 新增了块级作用域。

    const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。


    首先我们要知道块级作用域:任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。

    ES5 只有全局作用域和函数作用域,没有块级作用域,块级作用域是ES6出现的一个概念。


    1.代码块内有效

    let 是在代码块内有效,var 是在全局范围内有效。

    {
        let a = 1;
        var s = 2;
    }
    console.log(a);
    //报错 ReferenceError: a is not defined
    console.log(s);   //2
    //let是在代码块内有效,var在全局范围内有效

    2.不能重复声明

    let在相同的作用域内只能声明一次 ,var 可以声明多次。

    let a = 1;
    let a = 10;
    var s = 2;
    var s = 20;
    console.log(a);
    //报错 Identifier 'a' has already been declared
    console.log(s);   //20
    //let 只能声明一次 var 可以声明多次

    3.不存在变量提升

    let ,const不存在变量提升,var 会变量提升。

    首先说一下什么是变量提升:函数及变量的声明都将被提升到函数的最顶部。注意JavaScript并不是严格的自上而下云习惯的语言。

    console.log(a);  //ReferenceError: a is not defined
    let a = "hello";
    console.log(d); //ReferenceError: d is not defined
    const d = "good";
    //let,const不存在变量提升
    console.log(s);  //undefined
    var s = "javascript";
    //var存在变量提升。即当脚本开始运行的时候,b这个变量已经存在了,但是还没有赋值,所以会输出 undefined。

    4.暂时性死区

    var s = "a";
    if(true){          //这是一个封闭的作用域
      console.log(s);  // ReferenceError: s is not defined 
      const s = "3.1415926";
      console.log(s);  // 3.1415926
      //存在全局变量s,但是块级作用域内const又声明了一个局部变量s,导致后者绑定这个块级作用域,所以在const声明变量前,对s赋值会报错。
    //上面代码中,在const命令声明变量s之前,都属于变量s的“死区”。
    }

    ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

    总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

     5.const对数组和对象的元素修改不算作对常量的修改。

        const GROUPS =["tom","jerry","jack"];
        GROUPS.push("sun");
        console.log(GROUPS);
        //合法的,GROUPS数组修改为["tom","jerry","jack","sun"]

    const 做到变量在声明初始化之后不允许改变是因为const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。并且默认常量使用大写。

    ES6有六种声明变量的办法:var,let,const,function,import,class。

  • 相关阅读:
    linux下安装启动rpc服务
    Red Hat5下源码安装mysql5.6过程记录
    安装使用Oracle OSWbb/OSWbba工具
    使用pip安装BeautifulSoup4模块
    部署Thomas Kyte 的 runstats 工具
    centos7之zabbix监控DELL磁盘阵列
    centos6.5之phpmyadmin安装
    centos7之zabbix服务器的常规优化及其它设置
    centos7之zabbix简单检查之端口监控
    mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)
  • 原文地址:https://www.cnblogs.com/JZN-dhy/p/13227670.html
Copyright © 2011-2022 走看看