2013-07-08 3 views
10

Всякий раз, когда я выполняю этот фрагмент, console.log перед возвратом возвращает массив с 20-кратным значением 23. Однако console.log (Check (users, 0, 20)); возвращает только «undefined».Возвращаемое значение рекурсивной функции «undefined»

Что я делаю неправильно?

var users = [23, 23, 23, 23, 23, 23, 23, 23, 23, 23]; 
console.log(Check(users, 0, 20)); 

function Check(ids, counter, limit){ 
    ids.push(23); 

    // Recursion 
    if (counter+1 < limit){ 
     Check(ids, counter+1, limit); 
    } 
    else { 
     console.log(ids); 
     return ids; 
    } 
} 
+2

Операция 'return' в блоке' if' означает 'undefined'. Это может быть проще поддерживать, если вы поместите один оператор 'return' в конце функции и установите возвращаемое значение на основе оператора' if' – Ian

ответ

26

Вы забыли вернуть результат с точки, в которую вы входите в recusrion.

var users = [23, 23, 23, 23, 23, 23, 23, 23, 23, 23]; 
console.log(Check(users, 0, 20)); 

function Check(ids, counter, limit){ 
    ids.push(23); 

    // Recursion 
    if (counter+1 < limit){ 
     return Check(ids, counter+1, limit); // return here! 
    } 
    else { 
     console.log(ids); 
     return ids; 
    } 
} 

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

+0

. Я упростил функцию как можно больше, чтобы не отвлекать от реального проблема. Большое спасибо. – Hedge

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