zoukankan      html  css  js  c++  java
  • 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 声明的变量。

    都必须先声明再使用。

  • 相关阅读:
    RadioGroup,Radio单选按钮,CheckBox的使用
    使用Intent启动图片裁剪时遇到的问题:Intent#setData()与Intent#setType()赋值问题
    onActivityResult()的用法
    android:图片裁剪
    Sublime Text快捷键
    sublime text3 安装插件
    windows的git服务器搭建
    查询字符串是否已存在
    js 兼容基础
    SOA 一些基本概念
  • 原文地址:https://www.cnblogs.com/huwt/p/10702714.html
Copyright © 2011-2022 走看看