arm-linux

http://armboard.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

    今天,编写一个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编码中,注意尽量避免使用同名的变量,以免发生变量名冲突这样的问题。这种问题极其隐蔽,很难发现!

posted on 2006-08-22 23:22  arm-linux  阅读(410)  评论(0编辑  收藏  举报