为什么我得到" undefined"在JavaScript中

时间:2016-03-05 15:04:25

标签: javascript

你能帮忙吗,为什么我得到这个undefined值而不是返回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;
      } 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));
&#13;
&#13;
&#13;

提前谢谢。

4 个答案:

答案 0 :(得分:4)

函数需要在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);
                 }
             }
         }

答案 1 :(得分:3)

执行returning时,function call recursion不是if(Math.floor(m % 10) == 8){ a++; return sevens(Math.floor(m / 10), a); }else{ return sevens(Math.floor(m / 10), a); }

return

如果您function内没有undefined任何内容,默认情况下它会返回var $els = $('#elem1, #elem2'); $els.toggle(); 。并非在所有情况下。这取决于你调用特定函数的方式。

答案 2 :(得分:2)

也许你稍微改变了一下逻辑,因为如果在那个部分函数用return完成,你不需要else部分。

另一项更改是将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));

答案 3 :(得分:0)

你忘了返回,否则,我重构了一下sevens函数,你可以在代码片段中运行。

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));