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

  • 相关阅读:
    获取物料批次特性取值BAPI
    获取域的固定值的函数:DD_DOMVALU…
    CJ20N中对WBS元素执行删除操作时触…
    SM30相关操作
    CL03对应的BAPI(根据类查特性)
    两个数值交换
    char*,string,float,int 转换
    字符串 分割
    C++ 关于I/O
    TCP
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/12240875.html
Copyright © 2011-2022 走看看