JavaScript的全局变量
全局变量
与某些编程语言不同,JavaScript
并没有一种可以声明全局变量的关键字,有的只是全局变量的功能。
-
在最外层的作用域,也就是
window
用var
声明的变量就是全局变量。 -
在函数内部,不用关键字声明变量,直接赋值,这时也是个全局变量
var a = 1;
function bar(){
var a = 10;
function foo(){
console.log(a); // 10
console.log(window.a); // 1
}
foo()
}
bar();
因为在最外层的变量,会被作为window
的属性,前提是用var
声明,这时候就算函数内部声明了相同的变量,依然可以通过window
对象找到外部定义的变量,这就有了全局变量的功能。
var b = 2;
function bar(){
b = 10; //通过LHS引用的最外层的b,并赋值,这不是声明
d = 4; // 全局,作为window的属性
console.log(b); // 10
}
bar();
console.log(b); // 10
console.log(d); // 4
这是因为不成功的LHS引用,在非严格模式下,会自己创建一个全局变量。如果是不成功的RHS引用就会直接报错。
虽然这样也能声明,但最好不要,因为在严格模式下,是不允许不使用关键字就声明变量的。
所以真的想要全局变量,请使用第一种方法。
至于局部变量,那就多了,函数作用域和块作用域里声明的都是局部变量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!