【良少的专栏】

余好读书,乐思善疑。有过目不忘之能,亦有掩卷即忘之病,故尝攥文以记之。

沈东良ID:shendl
248281次访问,排名237好友3人,关注者101
shendl的文章
原创 110 篇
翻译 4 篇
转载 20 篇
评论 569 篇
沈东良的公告
人生信条[我可以被打倒,但绝对不会被打败!]偶像[努尔哈赤] 原因[匹夫一怒可倾国]
最近评论
zhangkai08111:真的不是很清楚。。。。
比如从页面到数据库。
从数据库到页面出现的问题很多。
shendl:漏了“插件说明”部分,现在发上来了http://blog.csdn.net/shendl/archive/2008/08/21/2805213.aspx
shendl:本系列文章有了开源项目springosginodm,地址:http://code.google.com/p/springosginodm/
shendl:本系列出了第二篇文章了:《OSGI服务发布和导入的自主实现》
—OSGI+Spring+Hibernate+...完美解决方案[非SpringDM]之二
http://blog.csdn.net/shendl/archive/2008/08/06/2778806.aspx
realdreamer:spring 可以不需要 spring-dm 就能在 osgi 环境下很好的工作. spring-dm 只是辅助(猜测可能是通过aop方式)将一些 spring bean 输出为 osgi service, 并在内部做了一些手脚.

文章分类
收藏
    相册
    blog图片
    我的照片
    推荐Blog
    CSDN专家群(RSS)
    博客周刊(RSS)
    张孝祥专栏(RSS)
    我的CSDN作家区
    杨洪波(RSS)
    许式伟的专栏(RSS)
    谭振林(RSS)
    银狐999(RSS)
    阿蒙专栏(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Javascript的变量作用域居然可以跨越多个函数!收藏

    新一篇: 使用DWR反转AJAX的失败经验和教训 | 旧一篇: 出现java.lang.UnsupportedClassVersionError 错误的原因

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

    发表于 @ 2006年08月22日 23:22:00|评论(loading...)|编辑

    新一篇: 使用DWR反转AJAX的失败经验和教训 | 旧一篇: 出现java.lang.UnsupportedClassVersionError 错误的原因

    评论

    #myy 发表于2006-08-23 10:01:00  IP: 211.90.95.*
    在html的js中任何地方直接写变量 i=...,相当于 window.i=...
    当然是全局的了。

    正确的写法是 var i=...

    楼主是火星人,鉴定完毕。
    #rainkee 发表于2006-09-14 22:51:00  IP: 60.178.255.*
    楼上的评论太幽默了,狂笑中……
    #hax 发表于2006-09-15 02:14:00  IP: 221.137.56.*
    楼主确实是火星人。
    #archer 发表于2006-09-15 11:36:00  IP: 58.34.241.*
    多看看JAVASCRIPT REFERENCE,里面有说明,没有用var定义的变量会自动成为全局变量。
    虽然文档里说了,但从使用者的角度上看,楼主的感觉的确是普遍现象,如果我们是Javascript语言的定义者,应该觉得这的确是不好的特性。
    #LZ真TMD 2B 发表于2006-09-18 12:44:00  IP: 218.88.35.*
    呵呵,LZ真是够JB幽默啊。
    虽然这个问题对于普通用户来说是很难认识到,但你也不能总自以为是的用专家的口气说这道那的啊,你看你在自己的BLOG里丢了多少人了,真佩服你的心理素质,你发现问题就虚心请教一下,别总是装2B吧。
    #CarlosYoung 发表于2007-09-17 11:02:04  IP: 202.105.139.*
    楼主的代码确实有些问题。小弟才疏学浅,请教楼上几位,如下代码会输出什么样结果呢?

    for (var a=0;a<100 ;a++ )
    {
    var subq="<---><br />"
    if(a<4)
    {
    var t=0; //局部的
    t+=a;
    }
    }

    //这里应该报未定义吧?
    for(;t<10;t++)
    {
    document.write("t"+t.toString()+"--<br/>"); //t可是未曾定义啊~~
    }


    document.write("a="+a+"<br />");
    document.write("subq="+subq+"<br />");
    document.write("t="+t);
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 沈东良