• ECMAScript6-1


    1、let与const

      ES205(ES6)新增两个重要的JavaScript关键字:let和const

      let声明的变量只在let命令所在的代码块内有效,const声明一个只读的常量,一旦声明,其值就不能改变

    1.1、let命令

     let命令有以下特点:

    (1)代码块内有效

      ES2015(ES6)新增加了两个重要的Javascript关键字:le't和const。llet声明的变量只在let所在的代码块中有效,

      const声明一个只读的常量,一旦声明,常量的值不能改变

    {
        let a = 1;
        var b = 2;
        console.log(a);//输出1
        console.log(b);//输出2
    }
    console.log(a);//报错 ReferenceError: a is not defined
    console.log(b);//输出2

    (2)不能重复赋值

      let只能声明一次,var可以声明多次:

    let a = 1;
    let a = 2;//报错 Identifier 'a' has already been declared
    var b = 3;
    var b = 4;
    console.log(a);
    console.log(b);//输出4

    (3)不存在变量提升

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

    console.log(a);  //ReferenceError: a is not defined
    let a = "apple";
    
    console.log(b);  //undefined
    var b = "banana";

    (4)暂时性死区

    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }

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

    1.2、const命令

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

    基本用法:

    const P = "3.1415926";
    console.log(p)  // 3.1415926
    
    const M;  // 报错 SyntaxError: Missing initializer in const declaration

    const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

    const foo;
    // 报错 SyntaxError: Missing initializer in const declaration

    上面代码表示,对于const来说,只声明不赋值,就会报错。

    const的作用域与let命令相同:只在声明所在的块级作用域内有效。

    if (true) {
      const MAX = 5;
    }
    
    MAX // Uncaught ReferenceError: MAX is not defined

    const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用

    if (true) {
      console.log(MAX); // ReferenceError
      const MAX = 5;
    }

    上面代码在常量MAX声明之前就调用,结果报错。const声明的常量,也与let一样不可重复声明

    var message = "Hello!";
    let age = 25;
    
    // 以下两行都会报错
    const message = "Goodbye!";
    const age = 30;

    暂时性死区:

    var P = 1;
    if(true){
      console.log(P);  //报错 ReferenceError: PI is not defined
      const PI = 2;
    }

    代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 P之前使用它会报错。

  • 相关阅读:
    java 多线程
    数据结构与算法-----快速排序
    JS 强制类型转化
    VS Code 编辑器
    MySQL8数据库安装配置和启动
    listview更改选中时item背景色(转)
    Android下用程序的方法为ListView设置分割线Divider样式
    listview android:cacheColorHint,android:listSelector属性作用
    Android手动显示和隐藏软键盘
    android调试debug快捷键
  • 原文地址:https://www.cnblogs.com/linxiaoran/p/12053581.html
Copyright © 2020-2023  润新知