先猜猜下面的输出结果:
<script language="javascript">
var2 = 111;
function foo()
{
document.write("var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
var var2 = 122;
}
foo();
</script>
如果结果如下,说明,你对JavaScript变量的申明以及初始化有一定的了解了
var2: undefined
window.var2: 111
其实函数内的变量都是先定义,后赋值的,不管定义变量的语句写在何处。比如,
function foo()
{
document.write(var01);
var var01=1;
document.write(var02);
var var02=2;
}
该函数等价于:
function foo()
{
var var01;
var var02;
document.write(var01);
var01 = 1;
document.write(var02);
var02 =2;
}
所以在执行document.write(var01)时,变量只是定义了,而没有被赋值,所以输出undefined.
继续关于作用域的问题,先看如下代码:
<script language="javascript">
var var1 = 0;
document.write("var1: "+var1 + '<br>');
var2 = 111;
function foo()
{
document.write("var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
var2 = 12;
document.write("<br>var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
}
foo();
</script>
然后比对项目的代码:
<script language="javascript">
var var1 = 0;
document.write("var1: "+var1 + '<br>');
var2 = 111;
function foo()
{
document.write("var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
var var2 = 122;
document.write("var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
var2 = 12;
document.write("<br>var2: "+var2+"<br>");
document.write("window.var2: "+window.var2+"<br>");
}
foo();
</script>
补充关于for循环中i变量,因为变量申明少了var,for 嵌套for循环时建议用不同的遍历变量,请先猜出下面的输出结果:
<script type="text/javascript">
var i = 1;
function Test()
{
var aa = 33;
document.write(i+"<br>");
i = i + 1;
document.write(i+"<br>");
for(var i = 0 ; i < 3; i ++ )
{
aa = aa + i;
for(var i = 0 ; i < 3; i ++ )
{
aa = aa + i;
}
}
document.write(aa+"<br>");
document.write(i+"<br>");
}
Test();
document.write(i+"<br>");
</script>
结果你猜对了么?:
undefined
NaN
36
4
1
总结:(具体例子可以参考)
在学习JavaScript的变量作用域之前,我们应当明确几点:
a、JavaScript的变量作用域是基于其特有的作用域链的。
b、JavaScript没有块级作用域。
c、函数中声明的变量在整个函数中都有定义。