• ES6学习之let和const


    1.let

    基本用法:let声明的变量,只在let命令所在的代码块内有效

    {
        let a = 1;
        var b = 2;
    }
    console.log(a)  //a is not defined
    console.log(b)  //2
    for(let i=0;i<5;i++){
        //....
    }
    console.log(i)  //i is not defined

    for循环内的var和let声明

    for(var i=0;i<5;i++){
        //....
    }
    console.log(i)  //5

    var声明会产生一个全局变量i,循环结束后i=5

    for(let i=0;i<5;i++){
        //....
    }
    console.log(i)  //i is not defined

    let声明的变量i,只在本轮循环中有效,相当于每次循环都会重新声明新的变量i,且只在声明的块作用域内有效

    不存在变量提升

    console.log(a);  //undefined
    var a = "hello";
    console.log(b); //报错:b is not defined
    let b = "Hello"

    let声明的变量不能在声明之前使用

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

    var tem = "hello";
    if(true){
        tem = "Hello"   //ReferenceError: tem is not defined
        let tem;
    }

    在代码块内,使用let命令声明变量之前,该变量都是不可用的

    不允许重复声明

    if (true) {
        var a = "hello";
        let a = "Hello"; //SyntaxError: Identifier 'a' has already been declared
    
        let b = "sayhi";
        let b = "sayHi"; //SyntaxError: Identifier 'b' has already been declared
    }

    块级作用域

    function test(){
        let n = 5;
        if(true){
            let n = 10;
        }
        console.log(n)  //5
    }
    test()

    let声明的变量只在当前块作用域内有效,故输出5而非10

    2.const

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

    const声明的变量不得改变值,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
    const PI = 3.1415;
    console.log(PI);    //3.1415
    PI = 3; //TypeError: Assignment to constant variable.
    const PI;   //SyntaxError: Missing initializer in const declaration
    PI = 3;

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动

    对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。

    const PI = 3.1415;
    PI = 3; //TypeError: Assignment to constant variable.
    const arr = [];
    arr.push("hello");
    console.log(arr) //[ 'hello' ]
    const obj = {};
    obj.sayhi = "Hi!"
    console.log(obj) //{ sayhi: 'Hi!' }
  • 相关阅读:
    信息安全[0836]
    05 二极管的微变等效和稳压二极管
    04 二极管的直流等效通路
    STM32 ADS112C04
    03 PN与二极管的特性
    STM32中的程序在RAM还是FLASH里运行?
    基于STM32的MLX90614人体红外测温枪
    KEIL5如何打开KEIL4工程 [复制链接]
    02 PN结的形成
    PreparedStatement和Statament的性能
  • 原文地址:https://www.cnblogs.com/sghy/p/7735760.html
Copyright © 2020-2023  润新知