2011-08-28 31 views
5

tôi dường như bằng cách nào đó có làm mất giá trị của một khung cảnh im biến ...Javascript - Biến mất giá trị của nó và "trở thành" không xác định

im cố gắng để làm gì không phải là quá quan trọng, vì vậy tôi đã thiết lập a (Cũng đã nhận xét) jsFiddle để cho bạn thấy những gì im nhận được. Ngoài ra mã dưới đây.

Nếu bất cứ ai có thể xem những gì xảy ra bất kỳ sự giúp đỡ được đánh giá cao :)

Xem jsFiddle>http://jsfiddle.net/qNWuV/4/ < Đề nghị bạn hãy xem đây

var habs = ["417,77", "410,363", "388,433", "262,435", "262,210", "391,101", "384,183", "61,114", "331,171", "164,433", "361,248", "302,329", "154,307", "410,350", "173,298", "308,429"]; //just an array of co-ords for another part of my app. Only the .length is used below. 

//############################ 
// NOTE: as this problem depends on random numbers you MAY not see it. If "undefined" is ANYWHERE in the Result, the problem is occurring, otherwise re-run the code. 
//############################ 


function link_habs(habs) { 
    var test2 = ''; 
    var hab_length = habs.length; 
    for (var e in habs) { 
     var hab_link_1 = get_link(hab_length, e + ','); 
     var hab_link_2 = get_link(hab_length, e + ',' + hab_link_1); 
     document.write('<br /><br />each1: ' + hab_link_1); //Variable lost? 
     document.write('<br />each2: ' + hab_link_2 + '<br />'); //Variable lost? 
     test2 += e + ':' + hab_link_1 + ',' + hab_link_2 + '<br />'; 
    } 
    document.write('<br /><br /><br />' + test2); 
} 

function get_link(count, not) { 
    var nots = not.split(','); 
    for (var i in nots) { nots[i] = parseInt(nots[i], 10); } 
    var hab_link = Math.floor(Math.random() * count); 
    if (nots.indexOf(hab_link) === -1) { 
     document.write('<br />returned: ' + hab_link); //Variable is intact HERE 
     return hab_link; 
    } else { 
     get_link(count, not); 
    } 
} 

link_habs(habs); 

Cheers
Charlie

+0

Bạn có thể loại bỏ đệ quy trong 'get_link'. Thả mệnh đề else từ câu lệnh if và bọc phần thân của phương thức bằng 'while (1) {...}'. –

+0

thực tế là bạn đã chấp nhận câu trả lời khiến câu hỏi này được giải quyết. không cần phải thêm nó vào tiêu đề. –

+0

Tôi không thực sự thấy lý do tại sao nó quan trọng, nhưng ok, tôi sẽ không làm điều đó một lần nữa ... –

Trả lời

6

Bạn không trả lại giá trị từ cuộc gọi đệ quy.

Thay đổi:

get_link(count, not); 

thành:.

return get_link(count, not); 
+0

OMG, lol chỉ hoàn toàn mù ... Vâng đó là một sự lãng phí 3 giờ ... Cảm ơn bạn rất nhiều :) –

1

Trong get_link chức năng, bạn đang đi qua các nots mảng sử dụng cho/trong Bạn nên sử dụng thường xuyên cho vòng lặp.

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