为什么我在JavaScript中获得“undefined”

问题描述:

您能否请帮助,为什么我得到undefined值而不是返回a为什么我在JavaScript中获得“undefined”

var a = 0; 
 
var m = 888; 
 
    
 
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++; 
 
      sevens(Math.floor(m/10), a); 
 
     } else { 
 
      sevens(Math.floor(m/10), a); 
 
     } 
 
    } 
 
} 
 
    
 
document.write("in "+m + " " + "it is" + " " + sevens(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); 
       } 
      } 
     } 
+0

哦,我现在看到的,我要补充的递归前面的“回报”,谢谢。 –

你是不是returningfunction call虽然做了recursion

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

如果你没有一个functionreturn什么,默认情况下它会返回undefined。并非所有情况下。这取决于您调用特定功能的方式。

也许你改变了一下逻辑,因为如果在那部分功能是用return来完成的,你不需要其他部分。

其他更改将暂停Math.floor结合其余运算符%。它总是返回一个整数值。

第三部分是将sevens的呼叫移到if语句之外,因为它无论如何称为。

var a = 0, 
 
    m = 888; 
 

 
function sevens(m, a) { 
 
    if (m == 0) { 
 
     document.write("Amount of 8's is " + a + "<br>"); 
 
     return a;           // exit function, rest 
 
    }              // of function is else part 
 
    if (m % 10 == 8) {          // % --> int 
 
     a++; 
 
    } 
 
    return sevens(Math.floor(m/10), a);     // return result of call 
 
} 
 

 
document.write("in " + m + " " + "it is" + " " + sevens(m, a));

你忘了回报,否则,我重构一点点的七人榄球赛功能,您可以在代码段运行。

var a = 0; 
 
var m = 888; 
 

 
function sevens(m, a) { 
 
    if (m === 0) { 
 
    document.write("Amount of 8's is " + a + "<br>"); 
 
    return a; 
 
    } 
 
    if (Math.floor(m % 10) === 8) { 
 
    a += 1; 
 
    } 
 
    return sevens(Math.floor(m/10), a); 
 
} 
 

 
document.write("in " + m + " " + "it is" + " " + sevens(m, a));