Javascript-变量丢失其值并;成为;未定义

Javascript-变量丢失其值并;成为;未定义,javascript,jquery,variables,random,Javascript,Jquery,Variables,Random,我似乎不知何故丢失了一个变量im设置的值 我想做什么并不重要,所以我建立了一个(评论良好的)JSFIDLE来向您展示我得到了什么。代码也在下面 如果有人能看到发生了什么,我们将不胜感激:) 请参阅jsFiddle>

我似乎不知何故丢失了一个变量im设置的值

我想做什么并不重要,所以我建立了一个(评论良好的)JSFIDLE来向您展示我得到了什么。代码也在下面

如果有人能看到发生了什么,我们将不胜感激:)

请参阅jsFiddle><建议您在此处查看

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);
var habs=[“417,77”,“410363”,“388433”,“262435”,“262210”,“391101”,“384183”,“61114”,“331171”,“164433”,“361248”,“302329”,“154307”,“410350”,“173298”,“308429”]//只是我的应用程序另一部分的一组单词。下面仅使用.length。
//############################
//注意:由于这个问题取决于随机数,您可能看不到它。如果结果中的任何地方有“undefined”,则问题正在发生,否则重新运行代码。
//############################
功能链接\u habs(habs){
var test2='';
var hab_长度=habs.length;
用于(habs中的变量e){
var hab_link_1=get_link(hab_长度,e+',');
var hab_link_2=get_link(hab_长度,e+,'+hab_link_1);
document.write('

each1:'+hab_link_1);//变量丢失? document.write('
each2:'+hab_link_2+'
');//变量丢失? test2+=e+':“+hab_-link_1+”,“+hab_-link_2+”
”; } 编写(“


”+test2); } 函数get_link(计数,非计数){ var nots=not.split(','); 对于(nots中的vari){nots[i]=parseInt(nots[i],10);} var hab_link=Math.floor(Math.random()*count); if(非索引of(hab_-link)=-1){ document.write('
返回:'+hab_link);//变量在这里是完整的 返回hab_链接; }否则{ 获取链接(计数,而不是); } } 联络民政事务局(民政事务局);;
干杯

Charlie

您没有从递归调用返回值

更改:

get_link(count, not);
进入:


get\u link
函数中,使用for/In遍历
nots
数组。你应该使用一个常规的for循环。

你可以在
get\u链接中去掉递归。从if语句中删除else子句,并用
while(1){…}
包装方法体。接受答案的事实使这个问题得以解决。没有必要在标题中添加它。
return get_link(count, not);