zoukankan      html  css  js  c++  java
  • ES6基础之let、const

    es6的块级作用域通俗的讲就是一对花括号中的区域(声明对象的花括号不是块级作用域),块级作用域可以嵌套。

    let

    1、le声明的变量只在当前(块级)作用域内有效。

    2、let声明的变量不能被重复声明。否则同一作用域下会报错,不同块级作用域可以定义同名变量。

    3、let不存在变量提升。先打印再声明会报错。

    关于暂存死区(了解即可):

    1、用var时会从上到下按顺序打印。

    2、一般会往上级作用域去找,但用 let 时在es6中向上找到了同一个变量也是拿不到的。因为es6规定如果块级作用域中存在let、const声明的变量,这个变量一开始就会形成一个封闭的作用域。

                var monkey = 'houzi';
                {
                    console.log(monkey);  //houzi
                    var monkey = 'little';
                }
                console.log(monkey);  //little
                
                
                let m = 'houzi';
                {
                    console.log(m);  //报错m is not defined
                    let m = 'little';
                }
                console.log(m);

    const

    1、声明常量:const c = '我是常量'

    2、常量必须在声明的时候被初始化(即赋值)

    3、常量不能重复声明、不存在提升、只能在当前(块级)作用域内有效

    4、一旦声明常量,就不能改变(引用类型需要冻结)。但是当常量为引用类型的时候,不能保证不改变;当const声明的值为引用类型(对象、数组、函数)时,const只能保证声明的常量地址不变,不能保证地址上的值不去发生改变。const只能保证指向或引用的地址是不变的。

    5、使用const声明时,使用小写字母也不会报错,不过大家一般会使用大写字母。

    Object.freeze(const)方法可以冻结对象,使其失去被修改的能力(即不能被扩展了)。冻结后的修改会失效,对象的属性依旧为修改之前的。

    冻结对象后扩展属性不会报错,冻结数组后扩展属性会报错。这是规定好的。

    es6之前使用Object.defineProperty(obj,name,value)方法设置常量对象的属性为不可被修改,再使用Object.seal(对象名)方法设置对象属性不可被扩展。

  • 相关阅读:
    AdminLTE 3.0发布了
    .NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响
    【译】ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
    物品编码中心所说的包装指示符
    Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令
    Asp.Net Core Mvc Razor之RazorPage
    基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
    Qt的下载地址
    由于MicrosoftVisualStudio14.0DesignerShadowCache导致的一个异常问题
    Spring系列.事务管理原理简析
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/12240875.html
Copyright © 2011-2022 走看看