今天,编写一个JavaScript的代码,是这样子的:
function a(){
...
for(i=0;i<abc.length;i++){
...
b();
...
}
...
}
function b(){
...
for(i=0;i<def.length;i++){
...
}
...
}
这样2个JavaScript函数。然而,a函数仅仅执行了一次循环,就跳出了for循环。它本应该执行多次循环。
我查了一整天代码,刚才终于让我发现了错误的原因。
原来,Javascript的变量,生命周期管理有问题。函数a和b的局部变量i, JavaScript认为它们是同一个变量。
这样,在函数b中执行完循环后,函数a中的i值已经超过了条件,所以每一次都只执行一次a的for循环。
我把b函数中的i改成j之后,就正常了!
这种变量生命周期的管理,确实是有悖常理的。 我使用的是IE7,不知道这是不是JavaScript的规范?还是IE7自身的实现有问题?
看来,我们必须在JavaScript编码中,注意尽量避免使用同名的变量,以免发生变量名冲突这样的问题。这种问题极其隐蔽,很难发现!