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 替换新增代码,再逐步重构,避免一次改动引入作用域相关的隐藏问题。

🌐 浏览器支持

浏览器 ChromeChrome EdgeEdge FirefoxFirefox SafariSafari OperaOpera
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。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏