var 声明
最后更新:2026-09-09
var 声明
var 是 ES6 之前唯一的变量声明方式,作用域是函数级而不是块级:在 if 或 for 里声明的变量,出了大括号照样能访问。它还会把声明提升到作用域顶部(赋值不提升),并且允许重复声明同名变量。新代码建议用 let 和 const 替代。
| 分类 | 变量声明 |
|---|---|
| 作用域 | 函数作用域(或全局) |
| 变量提升 | 声明提升,赋值不提升,声明前访问得到 undefined |
| 重复声明 | 允许,后者覆盖前者 |
| 重新赋值 | 允许 |
| ES 版本 | ES1(1997) |
📝 语法
var 变量名 = 初始值;
⚙️ 参数
| 变量名 | 同 let,遵循标识符命名规则;重复声明同一名字不会报错,后者覆盖前者。 |
|---|---|
| 初始值 | 可选。省略时值为 undefined,因为声明会被提升而赋值不会。 |
返回值:不返回值,var 是一条声明语句。
是否修改原值:否(返回新值)
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
undefined
赋值在后
undefined
⚠️ 警告 在全局作用域用 var 声明的变量会自动变成 window 的属性(let、const 不会),容易和第三方脚本互相覆盖。
💡 提示 维护老项目时看到 var 不必立刻全改:先用 let/const 替换新增代码,再逐步重构,避免一次改动引入作用域相关的隐藏问题。
🌐 浏览器支持
| 浏览器 | |||||
|---|---|---|---|---|---|
| var | ✓ v1 | ✓ v12 | ✓ v1 | ✓ v1 | ✓ v1 |
| 所有现代浏览器均支持 | |||||
🏷️ 相关语句
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Qvar 的变量提升到底提升了什么?
A只提升声明,不提升赋值。执行到代码所在作用域时,JavaScript 会先把 var 声明的变量登记为 undefined,所以你可以在赋值语句之前访问它而不报错,只是拿到 undefined;真正的赋值要等执行到那一行才发生。
Q为什么循环里用 var 给按钮绑定事件会出问题?
A因为整个循环共用一个 var 变量,所有回调捕获的是同一个绑定;等回调真正执行时循环早已结束,拿到的都是最后一次的值。改成 let 让每轮迭代拥有自己的副本即可解决,这是闭包经典陷阱。
Q新项目还应该用 var 吗?
A基本不用。let 和 const 提供了更清晰的块级作用域、禁止重复声明、还有暂时性死区保护,能挡掉 var 时代最常见的几类 bug。只有在维护不经过构建工具的古老代码时才会保留 var。