2016-03-05 2 views
2

Не могли бы вы помочь, почему я получаю это значение undefined вместо того, чтобы возвращать a?Почему я получаю «undefined» в JavaScript

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

Спасибо заранее.

ответ

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); 
       } 
      } 
     } 
+0

о теперь я вижу, что я должен добавить «возвращение» перед рекурсии, спасибо. –

3

Вы не 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); 
} 

Если вы не return ничего внутри function, по умолчанию он будет возвращать undefined. Не во всех случаях. Это зависит от того, как вы вызываете конкретную функцию.

2

Возможно, вы немного измените логику, потому что вам не нужна дополнительная часть, если в той части функция завершится с помощью 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));

0

Вы забываете возвращение, в противном случае, я переработан немного функции семерки, и вы можете запустить в фрагменте кода.

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

Смежные вопросы