作用域
-
全局
全局上下文中,当前文件可用
-
函数
某个函数内部可用,外部不可用
-
eval
JavaScript中的
eval()函数是一个全局函数,它的作用是将传入的字符串当作JavaScript代码来执行。
eval()函数在JavaScript中有一些特定的用途和适用范围,但需要谨慎使用,以下是一些常见的情况:- 动态执行代码:
eval()函数可以将字符串作为JavaScript代码来执行,这在某些动态生成代码的场景下可能会有用。比如,根据用户输入的表达式来计算结果。 - JSON解析: 在某些情况下,可以使用
eval()函数来解析JSON字符串。不过需要确保JSON字符串是安全的,避免恶意代码注入。 - 动态创建函数: 可以使用
eval()函数来动态创建函数,这在一些特定的情况下可能会有用。 - 调试和测试: 在调试和测试阶段,有时可以使用
eval()函数来快速验证一些代码片段的效果。
然而,需要注意的是,由于
eval()函数会改变作用域链并引入安全风险,因此在实际开发中应尽量避免使用eval()函数。如果有其他替代方案,最好选择更安全和可控的方式来实现相同的功能 - 动态执行代码:
-
块
某一个花括号包裹的语句中
let
let关键字用于声明一个变量
- 不能进行重复声明
- 块级作用域定义的let变量不能在外部使用
- 块级作用域
- 不存在变量提升
- 不影响作用域链
作用域链:一层一层的嵌套关系,通过层层的作用域中查找属性和方法,当前作用域中没有该属性和方法向上查找
const
const关键字用于声明一个常量
- 一定要赋初始值
- 常量一般使用大写
- 常量值不能修改
- 块级作用域
对于数组和对象的元素修改,不算是对常量的修改 因为存放的是地址,地址的值没有改变
暂时性死区
在JavaScript中,暂时性死区(Temporal Dead Zone,简称TDZ)是指在代码块中使用let或const声明变量时,变量在声明之前无法被访问的现象。这意味着在变量声明之前对其进行访问或赋值操作会导致ReferenceError错误。
使用let或const声明变量,暂时性死区可以确保变量在声明之前不可访问,避免了变量提升带来的问题。 通过暂时性死区,可以避免在意外情况下访问未声明的变量,减少代码错误的可能性。