全局作用域变量在函数外声明,可跨函数访问,生命周期至页面关闭;局部作用域变量在函数内用var/let/const声明,仅函数内有效,执行完即释放;隐式赋值(如x=10)会意外创建全局变量。

区分全局作用域和局部作用域,关键看变量或函数的声明位置和生效范围。
看声明位置:是否在函数内部
在最外层(即所有函数之外)声明的变量或函数,属于全局作用域;在函数内部用 var、let 或 const 声明的,属于局部作用域。
-
全局:直接写在
<script></script>标签里,或独立 JS 文件的顶层 -
局部:只出现在函数体
{}内部(注意:ES6 之前if或for的{}不构成作用域)
看能否跨函数访问
全局变量可以在任意函数内直接读取;局部变量只能在定义它的那个函数内部使用,函数外访问会报错 ReferenceError。
- 函数内能访问全局变量,但全局不能访问函数内的局部变量
- 多个函数可以各自定义同名局部变量,互不影响
看生命周期和内存归属
全局变量随页面加载而创建,直到页面关闭才销毁,存在整个运行周期;局部变量在函数调用时分配在栈上,函数执行结束就自动释放。
- 全局变量挂载在 window 对象上(浏览器环境),例如
var a = 1等价于window.a = 1 - 局部变量不绑定到
window,也不会污染全局命名空间
警惕隐式全局变量
在函数内部不加 var/let/const 直接赋值,会意外创建全局变量——这不是局部作用域,而是“漏掉声明”的全局行为。
- 例如:
function fn() { x = 10; }中的x是全局变量 - 这种写法容易引发冲突,应始终显式声明
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











