JS作用域及其作用域链
作用域概述
通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
全局作用域
作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件
局部作用域
作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。
块级作用域
块级作用域由{}包括,if语句和for语句里面的{}等
变量的作用域
根据作用域不同,变量分为三种全局变量
局部变量
块级变量
全局变量
函数外部let的变量,在任何区域都可以访问和修改
特殊情况
- 局部变量或者块级变量没有let声明直接赋值的当全局变量看
- 函数内部的形参可以当作局部变量看
局部变量
函数内部let的变量,只能在当前函数内部访问和修改
块级变量
{}内部的let变量,只能在块作用域里访问,不能跨函数访问
作用域链
JavaScript在执⾏过程中会创建一个个可执⾏上下⽂
(每个函数执行都会创建这么一个可执行上下文)
每个可执⾏上下⽂的词法环境都会对外部词法环境进行引⽤,可通过该引⽤来获取外部词法环境中的变量和声明等,
这些引⽤串联起来,⼀直指向全局的词法环境,形成一个链式结构,被称为作⽤域链
简而言之: 函数内部可以访问到函数外部作用域的变量, 而外部函数还可以访问到全局作用域的变量,这样的变量作用域访问的链式结构, 被称之为作用域链
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)