函数内用var/let/const声明的变量具有函数作用域,外部不可访问;var有变量提升,let/const有暂时性死区且支持块级作用域;不加关键字赋值会污染全局,严格模式下报错。

在函数内部声明变量,只要用 var、let 或 const 明确声明,它就只在该函数内生效,外部无法访问。
函数作用域决定变量可见性
JavaScript 中函数会创建独立的作用域。所有在函数体内部用 var、let、const 声明的变量,包括函数参数,都属于这个函数作用域。
- 函数外无法读取或修改这些变量,尝试访问会报
ReferenceError - 不同函数可以声明同名变量,互不影响
- 函数每次调用都会新建一套局部变量,上一次调用的变量已销毁
三种声明方式的行为差异
var 声明的变量具有函数作用域,且存在变量提升;let 和 const 同样在函数内有效,但还支持更细粒度的块级作用域(如 if、for 内部)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
var x = 1;:函数内任意位置都可访问(因提升),但仅限本函数 -
let y = 2;:只在声明所在块(包括整个函数体)中有效,不存在变量提升,有暂时性死区 -
const z = 3;:规则同let,且不可重新赋值
常见误区:不加关键字直接赋值
如果在函数内写 a = 10;(没用 var/let/const),JS 会向上查找作用域链,最终在全局创建变量 a —— 这不是局部变量,而是意外污染全局环境。
- 这种写法不推荐,容易引发命名冲突和内存泄漏
- 严格模式下(
"use strict")会直接报错,阻止此类行为 - 函数参数本身也是局部变量,无需额外声明即可使用
生命周期与内存管理
函数内部变量的生命周期严格绑定于函数执行过程:
- 函数开始执行时,变量被初始化(分配内存)
- 函数执行结束(包括遇到
return或自然退出),变量立即被标记为可回收 - 若存在闭包,且内部函数引用了该变量,则变量会延长存活,直到内部函数不再被引用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










