function   invoke(){ 
        var   v   =   dataRecursion(ary,cons)   ; 
        alert(v);     //结果居然为undefined 
} 你给invoke里用的函数传参了吗?

解决方案 »

  1.   

    function   invoke(){ 
            var   v   =   dataRecursion(ary,cons)   ; 
            alert(v);     //结果居然为undefined 
    } invoke里,ary,cons根本就没有定义也没有值
      

  2.   

    传了。现在假定参数和逻辑都是正确的,正如我描述的,alert(ary[a])时是正确的,但返回给v后确是undefined
      

  3.   

    哦?代码基本上就是这样了。无非是再定义两个参数。
    我说过了,在递归函数中alert时是正确的,但返回给v后,alert(v)时却是undefined.
    我把dataRecursion   (ary[a],cons);改成了
    return dataRecursion   (ary[a],cons);还是一样的。。
     很奇怪。
      

  4.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD>
    <script>
    function   invoke(ary,cons){ 
            var   v   =   dataRecursion(ary,cons)   ; 
            alert(v);     //结果居然为undefined 
    } function   dataRecursion   (ary,cons)   { 
            for   (var   a   in   ary)   { 
                      if(ary[a]   instanceof   Array)   { 
                                dataRecursion   (ary[a],cons);             //在此递归调用 
                      }   else   if   (a   ==   cons){ 
                            alert(ary[a]);     //是有值的 
                            return   ary[a]   ;   //返回它 
                      } 
            } }  
    var aa= new Array(5);
    for (i=0;i<8 ;i++ )
    {
    aa[i]=100+i
    } invoke(aa,4);</script>
     <BODY>

     </BODY>
    </HTML>你自己试一下.
      

  5.   

    不用试也看得出来,你这段代码是没有递归调用的,直接从else if语句块返回了
      请分析或解释下当一个函数被递归调用后,再返回的时候,为什么返回的值是一个undefined?
      

  6.   

     请关心下递归函数,也请解释下递归函数中如何正确的返回值,特别是循环语句中递归调用时。
    不要总在看代码片段,说没有定义参数之类,我已经说过,假定参数都是正确的,并且函数也递归调用了,alert时值也是正确的,但返回后接收到的确实undefined,为什么?
      请各位考虑清楚后再回复!谢谢。如能得到正确合理的解释和解决办法,本人承诺加分!!
      

  7.   

    你递归的时候没有返回值,
    function   dataRecursion   (ary,cons)   { 
            for   (var   a   in   ary)   { 
                      if(ary[a]   instanceof   Array)   { 
                          return dataRecursion   (ary[a],cons);             //在此递归调用 
                      }   else   if   (a   ==   cons){ 
                            alert(ary[a]);     //是有值的 
                            return   ary[a]   ;   //返回它 
                      } 
            } } 
      

  8.   

    因为你没有返回递归的值,如果没有递归,能返回值,当执行到递归语句,这个函数就没有return语句了
    当然是undefined如果是在C#中,编译时就会报错了:不是每个路径都有返回值!
      

  9.   

    楼上可能说得不是很清楚,我今天也碰上这样的问题了,解决的办法是在调用自己里写上一个return 语句。如果你不写上return 语句的话,返回的结果当然是不可预知的,因为,你在每次调用自己里,执行的结果都会被忽略掉(没写return的话)。不知,大家听没白了没。