2013-07-08 13 views
10

Ogni volta che eseguo questo snippet il console.log prima della restituzione restituisce l'array con 20 volte il valore 23. Tuttavia console.log (Controlla (utenti, 0, 20)); ritorna solo 'indefinito'.Il valore restituito della funzione ricorsiva è 'indefinito'

Cosa sto sbagliando?

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

Nessuna istruzione 'return' nel blocco' if' significa 'indefinito'. Potrebbe essere più semplice da mantenere se si mette un'istruzione 'return' alla fine della funzione e si imposta il valore da restituire in base all'istruzione' if' – Ian

risposta

26

Si è dimenticato di restituire un risultato dal punto in cui si entra in recustion.

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

Ma il valore restituito sembra inutile, causa 'la vostra funzione che modifica anche l'array iniziale.

+0

Ho semplificato la funzione il più possibile per non distrarre dal reale problema. Molte grazie. – Hedge

Problemi correlati