今天看了一段javascript代码,如下:

 1      var i = 1;
 2 
 3       function Test() {
 4 
 5         var aa = 33;
 6 
 7         i = i + 1;
 8 
 9         for (var i = 0; i < 3; i++) {
10 
11           aa = aa + i;
12 
13           for (var i = 0; i < 3; i++) {
14 
15             aa = aa + i;
16 
17           }
18 
19         }
20 
21         alert(aa);//36
22 
23         alert(i);//4
24 
25       }
26 
27       Test();
28 

29       alert(i); //1 

感觉挺迷惑的,于是便放到本地调了调,发现这段代码有很多问题。 其中定义了三个变量,都叫i,并且还有一个循环,里面又嵌了一个循环,想必有人看到后都有点模棱两可的感觉。运行这段代码,执行的结果如下(注释所示):

36

4

1 

 

接下来是我的一些理解和看法。

首先,test()函数中的“ i = i + 1;”是多余的,因为test()函数里定义了变量i并且是在这行代码后面赋的值0,其实此时i还未定义,所以这行代码是可以删除的。

其次,test()函数里定义的两个i,让我看来是同一个变量,外层循环其实只进行了一次,内层循环进行三次后,aa值变成了36,i值变成了3,返回到外层循环后,i值加1,即变成了4 ,最后一个输出1是全局变量i,即第一个变量i的值。

本人也是从实践和猜测得出上面的一些结论的,可能什么地方说的不对或者言辞不当,还请各位批评指正,也请大家说说自己的看法。