2015-09-14 3 views
1

Так что я знаю, что это, вероятно, дубликат, но я не смог выяснить, как исправить мою проблему, просмотрев различные ответы на то, что похоже на одну и ту же тему более часа.Javascript Variable Scope Return Undefined

Эта функция отделяет цифры от числа, добавляет их вместе, и если итоговое число имеет более одной цифры, рекурсивно воспринимайте полученный результат обратно в функцию для обработки. Мое заявление о возвращении дает мне «неопределенное», и я не уверен, почему. Если оно определено в если утверждение, что это такое, я не понимаю, почему это не было бы так в другое заявление:

function digital_root(n) { 
    var numArray = n.toString().split(''); 
    var accumulator = 0; 
    for(var i = 0; i < numArray.length; i++){ 
     accumulator += parseInt(numArray[i]); 
    } 
    if(accumulator >= 10){ 
    digital_root(accumulator); 
    } 
    else{return accumulator}; 

}; 

digital_root(942);//should be 6, after 15 is passed back into digital_root() 
// but output is undefined. 

ответ

3

Вы должны вернуть результат вашего рекурсивного вызова, в противном случае он может» t разворачивает стек. Кроме того, ваш последний посторонний.

function digital_root(n) { 
    var numArray = n.toString().split(''); 
    var accumulator = 0; 
    for(var i = 0; i < numArray.length; i++){ 
     accumulator += parseInt(numArray[i]); 
    } 
    if(accumulator >= 10){ 
    return digital_root(accumulator); 
    } 
    return accumulator; 

}; 

digital_root(942);//ta-daaaa 
+1

Спасибо за краткий ответ, только то, что мне нужно! – swoopedj