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及对象,在定义之后仍可以修改其属性。
    今天你学习了吗!!!
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/nayek/p/11710397.html
Copyright © 2011-2022 走看看