let与const

48 阅读2分钟

作用域

  • 全局

    全局上下文中,当前文件可用

  • 函数

    某个函数内部可用,外部不可用

  • eval

    JavaScript中的eval()函数是一个全局函数,它的作用是将传入的字符串当作JavaScript代码来执行。
    eval()函数在JavaScript中有一些特定的用途和适用范围,但需要谨慎使用,以下是一些常见的情况:

    1. 动态执行代码:  eval()函数可以将字符串作为JavaScript代码来执行,这在某些动态生成代码的场景下可能会有用。比如,根据用户输入的表达式来计算结果。
    2. JSON解析:  在某些情况下,可以使用eval()函数来解析JSON字符串。不过需要确保JSON字符串是安全的,避免恶意代码注入。
    3. 动态创建函数:  可以使用eval()函数来动态创建函数,这在一些特定的情况下可能会有用。
    4. 调试和测试:  在调试和测试阶段,有时可以使用eval()函数来快速验证一些代码片段的效果。

    然而,需要注意的是,由于eval()函数会改变作用域链并引入安全风险,因此在实际开发中应尽量避免使用eval()函数。如果有其他替代方案,最好选择更安全和可控的方式来实现相同的功能

  • 某一个花括号包裹的语句中

let

let关键字用于声明一个变量

  • 不能进行重复声明
  • 块级作用域定义的let变量不能在外部使用
  • 块级作用域
  • 不存在变量提升
  • 不影响作用域链

作用域链:一层一层的嵌套关系,通过层层的作用域中查找属性和方法,当前作用域中没有该属性和方法向上查找

const

const关键字用于声明一个常量

  • 一定要赋初始值
  • 常量一般使用大写
  • 常量值不能修改
  • 块级作用域

对于数组和对象的元素修改,不算是对常量的修改 因为存放的是地址,地址的值没有改变

暂时性死区

在JavaScript中,暂时性死区(Temporal Dead Zone,简称TDZ)是指在代码块中使用let或const声明变量时,变量在声明之前无法被访问的现象。这意味着在变量声明之前对其进行访问或赋值操作会导致ReferenceError错误。

使用let或const声明变量,暂时性死区可以确保变量在声明之前不可访问,避免了变量提升带来的问题。 通过暂时性死区,可以避免在意外情况下访问未声明的变量,减少代码错误的可能性。