• 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(对象名)方法设置对象属性不可被扩展。

  • 相关阅读:
    C# 重载运算符
    微信网站设置右上角发送、分享的内容——.net版本
    sql server使用中遇到的问题记录
    数据表格,查询、导出共用一个form表单,实现文件流方式下载
    .net开发过程中遇到的错误,及解决办法记录
    python获取随机验证码或者下发激活码
    BeautifulSoup随笔
    python:collections模块
    wait
    python:沙盒(virtualenv)
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/12240875.html
Copyright © 2020-2023  润新知