JavaScript 变量作用域与全局对象关系解析
本文通过代码示例解析 JavaScript 的变量作用域机制,重点说明 var 声明在函数与全局环境下的行为差异。文章指出所有全局变量均为 window 对象的属性,并演示未显式声明变量如何意外创建隐式全局变量,帮助开发者避免作用域污染问题。
JavaScript 变量作用域基础示例
代码清单 1-1 展示了 JavaScript 中变量作用域的具体示例。
//设置全局变量foo,并置为"test"
var foo = "test";
//在if块中
if(true){
//将foo置为'new test'
var foo = "new test";
}
//如我们所见,现在foo等于'new test'了
alert(foo == "new test");
//创建一个会修改变量foo的新函数
function test(){
var foo = "old test";
}
//然而在调用时,foo只在函数作用域内起作用
test();
//这里确认了foo 还是等于'new test'
alert(foo == "new test");
全局变量与 window 对象的关系
基于浏览器的 javascript 的一个有趣的特性是,所有属于全局变量作用域的变量其实都是window对象的属性。
代码清单 1-2 javascript中全局作用域和window对象
//一个全局作用域下的变量,存储了字符串'test'
var test = 'test';
//你可以看到我们的全局变量和window对象的test属性是一致的
alert(test == window.test)
隐式全局变量的风险
最后如果变量没有显式定义,它就是全局定义的,虽然它可能只在这个函数作用域的范围内使用。
代码清单 1-3 隐式全局作用域的变量声明
//一个设置了foo值的函数
function test(){
foo = "test";
}
//调用此函数以设置foo的值
test();
//我们发现foo现在是全局作用域下
alert(window.foo == "test");
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
