Javascript - 变量失去其价值并“成为”未定义

Posted

技术标签:

【中文标题】Javascript - 变量失去其价值并“成为”未定义【英文标题】:Javascript - Variable losing its value and "becoming" undefined 【发布时间】:2011-11-05 08:32:30 【问题描述】:

我似乎以某种方式丢失了变量 im 设置的值...

我想要做什么并不那么重要,所以我设置了一个(好评)jsFiddle 来告诉你我得到了什么。代码如下。

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

见jsFiddle>http://jsfiddle.net/qNWuV/4/

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

干杯 查理

【问题讨论】:

你可以摆脱get_link中的递归。从 if 语句中删除 else 子句,并用 while (1) ... 包裹方法体。 您已接受答案这一事实使这个问题得到了解决。无需在标题中添加。 【参考方案1】:

您没有从递归调用中返回值。

变化:

get_link(count, not);

进入:

return get_link(count, not);

【讨论】:

【参考方案2】:

get_link 函数中,您正在使用 for / in 遍历 nots 数组。您应该使用常规 for 循环。

【讨论】:

以上是关于Javascript - 变量失去其价值并“成为”未定义的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController 不应该在解除其 ViewController 时失去价值

合并:发布者有时会失去价值并完成

MaskedTextBoxFor 在提交 MVC Razor 视图后失去价值

JavaScript设计模式与开发实践-读书笔记闭包和高阶函数

TextArea 在 Razor Page 帖子上失去价值

Cordova IOS 应用程序,失去价值使用 window.localStorage 存储