2013-07-08 55 views
10

Bất cứ khi nào tôi thực thi đoạn mã này, console.log trước khi trả về mảng với giá trị gấp 20 lần 23. Tuy nhiên console.log (Check (users, 0, 20)); chỉ trả về 'không xác định'.Giá trị trả về của hàm đệ quy là 'undefined'

Tôi đang làm gì sai?

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

Không có câu lệnh 'return' nào trong khối' if' có nghĩa là 'undefined'. Nó có thể dễ dàng hơn để duy trì nếu bạn đặt một câu lệnh 'return' ở cuối hàm và đặt giá trị trả về dựa trên câu lệnh' if' – Ian

Trả lời

26

Bạn quên trả lại kết quả từ điểm, nơi bạn nhập 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; 
    } 
} 

Nhưng giá trị trả lại dường như vô dụng, khiến 'hàm của bạn cũng thay đổi mảng ban đầu.

+0

Tôi đã đơn giản hóa hàm càng nhiều càng tốt để không làm sao lãng vấn đề. Cảm ơn rất nhiều. – Hedge

Các vấn đề liên quan