别小看了这个递归~!其中有我们都忽略的知识~!你能解释吗?<script src="jquery-1.4.2.js"></script>
<body><div class="dis"></div>
<script>
var nums=1;
var a = {a:'a',b:'b',c:'c',d:{a1:'aa',a2:{a11:'1'},a3:'cc'},e:'e'};
print_r(a);
function print_r(o){ var nb="";
for(var i=0;i<nums;i++)
{
nb+="&nbsp;";
}

$.each(o,function(k,v){
if(typeof(v)=="string"){ $(".dis").append("<br/>"+nb+"["+k+"] => "+v);
}
else{
$(".dis").append("<br/>"+nb+"["+k+"] => ");
nums=nums+6;
print_r(v);
}   
});
}</script>
</body>

解决方案 »

  1.   

    csdn没高手了请问这段代码如何运行?我运行一下,谢谢!!!看看到底结果是什么玩艺儿
      

  2.   

    为什么我贴到C#的代码中,编译能过,但没有结果?郁闷死了再换一个C++程序,贴上去用VC依然能编译过,就是没有结果,气死了,,,,,再切到linux下,用g++ -o 犀利哥.o xxxx.cpp
    结果编译过了。。再运行:./犀利哥然后输出了一万行“犀利哥”第一万零一行却输出了“凤姐”,,,,我就奇了怪了
      

  3.   

    新建个网页,把代码放进去,要有jquery.min.js~!
      

  4.   


    大哥,怎么用vs2005新建网页?偶不会V.V
      

  5.   

    我把结果给你们发出来吧,不过也没用,这题主要是知道计算过程~! [a] => a
     [b] => b
     [c] => c
     [d] =>
           [a1] => aa
           [a2] =>
                 [a11] => 1
           [a3] => cc
     [e] => e
      

  6.   

    nums=nums+6;//从这句代码就知道,水平。
      

  7.   

    不就是递归输出一个json对象的所有键值对吗,需要解释什么?
      

  8.   

    版主,你好好看看在说行好吗,其中nums=nums+6;只加没减~!做结果的效果却实现了!~
      

  9.   

    没看过$.each的源码,所以不知道它内部是怎么执行的,但应该是由于闭包的缘故
      

  10.   

    不是很懂jqury,我就来打酱油好了
      

  11.   

    说实话,没研究过jquery。就那代码风格来说,一定就是把那个数组内的结果进行树形显示。
      

  12.   

    就是个典型的递归+输出控制问题。我想大家可以看看C#板块的这个问题
    http://topic.csdn.net/u/20100310/18/3768cc5a-a1ad-4190-a5b6-9185069150cf.html
    看看16,17楼是用什么方法操作  的
      

  13.   


    板主说的才是我发这个贴子我原因,我就是想知道,明明只加没减,但效果中却出了减的效果~!我发的代码正常理解应该输出是这样的~!
    [a] => a
     [b] => b
     [c] => c
     [d] =>
           [a1] => aa
           [a2] =>
                 [a11] => 1
                 [a3] => cc
                 [e] => e以上的效果是因为nums只加没减,所以nums会加到13~!
    板主,能帮我解释下吗?谢谢了~!
      

  14.   

    想知道原因你就运行这个<script>    var nums=1;
        var a = {a:'a',b:'b',c:'c',d:{a1:'aa',a2:{a11:'1'},a3:'cc'},e:'e'};
        print_r(a);
        function print_r(o){      
            $.each(o,function(k,v){
         var nb="";
                for(var i=0;i<nums;i++)
                {
                    nb+="&nbsp;";
                }
                if(typeof(v)=="string"){                $(".dis").append("<br/>"+nb+"["+k+"] => "+v);
                }
                else{
                    $(".dis").append("<br/>"+nb+"["+k+"] => ");
                    nums=nums+6;
                    print_r(v);  

                }
            });
        }</script>然后google:“javascript函数作用域与闭包”,变量逃脱是javascript里不算bug的bug,这个和递归无关,完全是javascript自己的一个特殊特性。 别把问题泛化到递归上面
      

  15.   

    我想了想,这个问题和"$.each"还有"javascript函数作用域与闭包"没关系~!
    应该是递归里的特性,暂且叫他“递归的状态维持”吧,等会做好实验,会发个详细的贴子!~
      

  16.   

    如果是C#里边你说的问题很容易解释啊
    num 一个值类型,在一个函数里边传的是附本,所以跳出作用域了NUM还是原来的值.
    JAVASCRIPT 我就不清楚了
      

  17.   

    javascript函数作用域与闭包 
    估计就是这个问题