2013-07-08 13 views
10

Bu snippet'i her çalıştırdığımda, dönüşten önce konsol.log, değeri 23 katın 20 katı ile döndürür. Ancak, console.log (Check (users, 0, 20)); sadece 'undefined' değerini döndürür.Özyinelemeli işlevin dönüş değeri 'undefined'

Neyi yanlış yapıyorum?

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

'if' bloğunda' return' ifadesi 'undefined' anlamına gelir. Eğer fonksiyonun sonuna bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ifadesine getirin ve değeri if if' ifadesi – Ian

cevap

26

Sonucun girdiği noktadan bir sonuç döndürmeyi unutmuşsunuzdur.

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

Ancak dönüş değeri işe yaramıyor gibi görünüyor, 'işleviniz de başlangıç ​​dizisini değiştiriyor.

+0

’a göre döndürecek şekilde ayarlamak daha kolay olabilir. Gerçeklerden uzaklaşmamak için işlevi mümkün olduğunca basitleştirdim sorun. Çok teşekkürler. – Hedge