zoukankan      html  css  js  c++  java
  • ES6之let和const

    let 和 const

    1. let

    • 使用let,声明的变量仅在块级作用域内有效
    • 不存在变量提升
    • 暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)
    • 不允许重复声明:let不允许在相同作用域内,重复声明同一个变量

    2. 块级作用域

    (1) 为什么需要块级作用域?

    • 没有块级作用域,会有很多不合理场景:
    • 内层变量可能会覆盖外层变量
    • 用来计数的循环变量泄露为全局变量

    (2) ES6 的块级作用域

    • ES6 允许块级作用域的任意嵌套,外层作用域无法读取内层作用域的变量
    • 块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
     1 // IIFE 写法
     2 (function () {
     3 var tmp = ...;
     4 ...
     5 }());
     6 
     7 // 块级作用域写法
     8 {
     9 let tmp = ...;
    10 ...
    11 }

    (3) 块级作用域与函数声明

    • 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

    3. const 命令

    • const声明一个只读的常量。一旦声明,常量的值就不能改变。
    • const一旦声明变量,就必须立即初始化,不能留到以后赋值。
    • 只在声明所在的块级作用域内有效,也是不提升,同样存在暂时性死区,也与let一样不可重复声明
    • const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。把一个对象定义为常量,但对象本身是可变的,所以依然可以为其添加新属性。
    • const 的定义是不可重新赋值的值,与不可变的值(immutable value)不同;const 定义的 Object及对象,在定义之后仍可以修改其属性。
    今天你学习了吗!!!
  • 相关阅读:
    C# String.Compare 方法测试
    C#checked 与 unchecked
    C#枚举类型
    C#结构体
    C越界和溢出的区别
    python/matlab : 将txt文件中的数据读为numpy数组
    matlab程序里调用python文件
    Python
    Pycharm调试及快捷键技巧
    Pycharm远程连接服务器debug时报错
  • 原文地址:https://www.cnblogs.com/nayek/p/11710397.html
Copyright © 2011-2022 走看看