为什么我会得到;“未定义”;在JavaScript中

为什么我会得到;“未定义”;在JavaScript中,javascript,Javascript,请您帮忙,为什么我得到这个未定义的值而不是返回a var a=0; var m=888; 函数七(m,a){ 如果(m==0){ 文件。填写(“8的金额为“+a+””; 返回a; }否则{ 如果(数学下限(m%10)==8){ a++; 七(数学楼层(m/10),a); }否则{ 七(数学楼层(m/10),a); } } } 写(“在“+m+”+”中是“+”+Seven(m,a))函数需要在else语句中返回一些内容。像这样: function sevens(m, a){

请您帮忙,为什么我得到这个
未定义的
值而不是返回
a

var a=0;
var m=888;
函数七(m,a){
如果(m==0){
文件。填写(“8的金额为“+a+”
”; 返回a; }否则{ 如果(数学下限(m%10)==8){ a++; 七(数学楼层(m/10),a); }否则{ 七(数学楼层(m/10),a); } } }
写(“在“+m+”+”中是“+”+Seven(m,a))
函数需要在
else
语句中返回一些内容。像这样:

function sevens(m, a){   
              if(m == 0){
                  document.write("Amount of 8's is "+a+"<br>");
                  return a;
              }else{
                 if(Math.floor(m % 10) == 8){
                     a++;
                     return sevens(Math.floor(m / 10), a);
                 }else{
                     return sevens(Math.floor(m / 10), a);
                 }
             }
         }
函数七(m,a){
如果(m==0){
文件。填写(“8的金额为“+a+”
”; 返回a; }否则{ 如果(数学下限(m%10)==8){ a++; 返回七(数学楼层(m/10),a); }否则{ 返回七(数学楼层(m/10),a); } } }
在执行
递归时,您不能
返回
函数调用

if(Math.floor(m % 10) == 8){
  a++;
  return sevens(Math.floor(m / 10), a);
}else{
  return sevens(Math.floor(m / 10), a);
}

如果不
返回
函数中的任何内容
,默认情况下它将返回
未定义的
。并非所有情况下都如此。这取决于您调用特定函数的方式。

也许您可以稍微更改一下逻辑,因为如果在then部分中函数以
返回完成,则不需要else部分

另一个更改是暂停
Math.floor
,并与余数操作符
%
结合使用。它总是返回一个整数值

第三部分是将
seven
的调用移到if语句之外,因为它无论如何都会被调用

var a=0,
m=888;
功能七(m,a){
如果(m==0){
文件。填写(“8的金额为“+a+”
”; 返回;//退出函数,rest }//函数的另一部分是 如果(m%10==8){/%-->int a++; } 返回七(数学楼层(m/10),a);//返回调用结果 }
写(“在“+m+”+”中是“+”+Seven(m,a))您忘记了返回,否则,我对sevens函数进行了一点重构,您可以在代码段中运行

var a=0;
var m=888;
功能七(m,a){
如果(m==0){
文件。填写(“8的金额为“+a+”
”; 返回a; } 如果(数学楼层(m%10)==8){ a+=1; } 返回七(数学楼层(m/10),a); } 写(“在“+m+”+”中是“+”+Seven(m,a))哦,我现在明白了,我必须在递归前面添加“return”,谢谢。