1.js的作用域是由函数划分的,而不是块儿
var too="test";
if(true)
{
//这是在块中的定义,此时还是全局变量
var too="new test";
}
alert(too=="new test"); //return true;
function test()
{
var too="old test"; //这是在函数中的定义,此时是局部变量
}
test();
alert(too=="new test"); //return true;too并没有改变
2.所有属于全局作用域的变量都是window对象的属性
上面例子中第一行的too就相当于window.too
看下面的例子
function test()
{
too="test";
}
test();
alert(window.too="test");
是不是很奇怪,上面例子中函数中的too是局部变量,在这里就是全局变量了
注意下两个例子的区别,一个通过显示声明 var too
一个隐示声明too="test";
也就是说没有显示定义的变量,它就是全局变量,虽然它可能只能在这个函数内使用。
作用域(scope)是JavaScript语言的基石之一,在构建复杂程序时也可能是最令人头痛的东西,只有真正的理解它,才能在实际的应用中游刃有余。