<script language="javascript">
function pp()
{
var num=dg();
alert(num);
}function dg(){
var num=Math.floor(Math.random()*100);
if (num>47 && num<58)
{
alert(num);
return num;
}
else
{
dg();
}
}</script><input type="button" onclick="pp()" value="button" />
很简单的一段代码,为什么有时候出现两次数字,有时候出现一次,第二次就是undifined?
不明真相。
求解。

解决方案 »

  1.   

    dg方法只有在 if (num>47 && num<58)为真时有返回值 
    为假时没有返回值。
    因此,为假时 pp方法里的 num就是 undefined
    dg里递归假设第1次为假 则进行递归  第2次为真 则alert(num)  然后将第1次的dg返回  执行pp里的alert 所以就是你说的第1次alert有数字  第2次 undefined
      

  2.   

    谢谢cb1156啦,我已经搞定了,其实很简单,只要在else中的递归调用dg()前面加上个return就可以搞定!
      

  3.   


    <script language="javascript">
    function pp(){
      var num=dg();        alert('第二次dg():'+num);
    }function dg(){
      var num=Math.floor(Math.random()*100);
      if (num>47 && num<58){
        alert('第一次:'+num);
        return num;
      }
      else{return dg();}
    }
    pp()
    </script>