全局作用域由声明位置决定:script内顶层var/function、最外层let/const、未声明赋值变量及window原生属性;局部作用域仅由函数创建,含函数内所有声明,每次调用新建独立作用域。

全局作用域和局部作用域的划分,核心看变量或函数在代码中**声明的位置**,而不是执行时在哪里调用。
全局作用域的判定方式
满足以下任一条件,就属于全局作用域:
- 直接写在
<script></script>标签内、且不在任何函数或代码块内部的var、function声明 - 在最外层(即没有任何函数包裹)使用
let或const声明的变量(ES6+) - 未声明直接赋值的变量,例如
a = 10(不推荐,会自动挂到window上) -
window对象的原生属性,如window.location、window.name,天然具有全局可访问性
局部作用域的判定方式
局部作用域也叫函数作用域,只在函数体内生效:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 在函数内部用
var、let、const或function声明的变量和函数 - 每次函数调用都会创建一个独立的新局部作用域,不同调用互不影响
- 函数内部可以访问外部(包括全局)的变量,但外部无法访问函数内部声明的内容
- 注意:
if、for等大括号{}在 ES5 中不构成作用域;只有函数能创建局部作用域(ES6 的let/const在块级才有块作用域,但那属于另一类)
常见混淆点提醒
这些情况容易误判,需特别注意:
立即学习“Java免费学习笔记(深入)”;
-
var a = 1写在函数外 → 全局;写在函数内 → 局部 -
function fn() { b = 2 }(没用var/let/const)→b是全局变量,即使在函数里赋值 - 嵌套函数中,内层函数可以访问外层函数的变量,这是靠作用域链实现的,但每个函数仍各自拥有自己的局部作用域
- 全局作用域生命周期从页面加载开始,到页面关闭结束;局部作用域随函数调用而创建,执行完即销毁(变量通常被回收)

















