今天看了一段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
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
4
1
接下来是我的一些理解和看法。
首先,test()函数中的“ i = i + 1;”是多余的,因为test()函数里定义了变量i并且是在这行代码后面赋的值0,其实此时i还未定义,所以这行代码是可以删除的。
其次,test()函数里定义的两个i,让我看来是同一个变量,外层循环其实只进行了一次,内层循环进行三次后,aa值变成了36,i值变成了3,返回到外层循环后,i值加1,即变成了4 ,最后一个输出1是全局变量i,即第一个变量i的值。
本人也是从实践和猜测得出上面的一些结论的,可能什么地方说的不对或者言辞不当,还请各位批评指正,也请大家说说自己的看法。
浙公网安备 33010602011771号