• JavaScript中的let和const


    在ES6之前,JavaScript中只有两种作用域:全局作用域和函数内部的局部作用域。ES6中新增了两个重要的关键字,let和const,从而引入了块级作用域。

     

    关键字var

    使用var关键字声明的变量不具备块级作用域的特性,即在函数外声明的变量即为全局变量。

    var声明的变量可以被重新定义。

    var i;
    var i;  //不报错

     

    使用var声明变量带来的问题

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

    for循环里的 i 仍是全局变量里的 i,即使在重新声明了。

     

    关键字let

     使用let关键字声明的变量,具备块级作用域。

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

     在相同的作用域(包括块级作用域)中,不能使用 let 来重置 var 声明的变量

    var i;
    let i;  //SyntaxError: Identifier 'i' has already been declared

     在相同的作用域(包括块级作用域)中,不能使用 let 来重置 let 声明的变量

    let i;
    let i;  //SyntaxError: Identifier 'i' has already been declared

     在相同的作用域(包括块级作用域)中,不能使用 var 来重置 let 声明的变量

    let i;
    var i;  //SyntaxError: Identifier 'i' has already been declared

     let 声明的变量必须先声明再使用

     

    关键字const

    const关键字也是用于声明一个或多个“常量”,在声明的同时必须进行初始化,并且初始化之后就不能再修改。

    这里要注意以下,使用const声明的初始值不能修改,是指变量与值的引用关系不能改变,也就是说如果你改变“值”,但能保证变量与它引用关系不变,其实是合法的。例如:

    const myObject = {
        name: "Mr hu",
        age: 20
    }
    myObject.age = 21;  //虽然修改了值,但引用关系不变,所以不报错
    const myObject = {
        name: "Mr hu",
        age: 20
    }
    myObject = {
        name: "Mr hu",
        age: 21
    }    //企图改变引用关系,报错

    当值为数组时,道理也一样。

     

    const和let有很多共同之处

    变量都具备块级作用域。

    在相同的作用域(包括块级作用域)中,不能使用 const 来重置 var 和 let 声明的变量。

    在相同的作用域(包括块级作用域)中,不能使用 const 来重置 const 声明的变量。

    都必须先声明再使用。

  • 相关阅读:
    Java 进制转换
    k-近邻算法实例
    Java JTS & 空间数据模型
    Java中 &&与&,||与|的区别
    http https 区别
    四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x
    OPC测试常用的OPCClient和OPCServer软件推荐
    关于TFS2010 远程无法创建团队项目的若干问题总结
    我对NHibernate的感受(4):令人欣喜的Interceptor机制
    我对NHibernate的感受(3):有些尴尬的集合支持
  • 原文地址:https://www.cnblogs.com/huwt/p/10702714.html
Copyright © 2020-2023  润新知