Javascript:将变量传递给函数会导致未定义

时间:2013-04-01 08:41:00

标签: javascript

这是我的第一个javascript项目,我无法将变量传递给函数。

以下是我的“全局变量”中的相关部分

var timesran = [];
for (var x= 0; x<38; x++){
timesran[x] = 0;
}

下面是第一个尝试将x传递给函数的函数,这样我就可以将结果存储在不同的数组中

function happytimes(){
for (var x= 0; x < 38; x++){
    switch (x){
        case 0:
            if (shouldiFlip[x]){
                randomizer(x);  //input that we want to feed into the function
                x++;
            }
}

(请注意:为了清晰起见,我已从摘录中剥离了case1-38的其余部分,所有其他情况看起来相同,并且具有相同的输出 - rando函数在随机函数函数的每个不同函数中都有效虽然它正在获得新的输出)

以下是随机函数函数

function randomizer(a){
if (startrunning){ 
    var rando = [];
    rando = Math.floor(Math.random()*4+1);
    timestorun[a] = rando[a];
    pos[a] = 0;
    console.log("hi there you are in new run now"+pos[a]+rando+timestorun[a]);
}
else{
pos[a] = pos[a] + 1;
        if (pos[a] >156){
            pos[a] = 0;
        }
    if (masterlet[pos[a]] == letter[a]){
        timesran[a] = timesran[a] +1;
            if (timesran[a] == timestorun[a]){
                console.log("ELSE THING"+pos[a]+rando+timestorun[a]);
                shouldiFlip[a] = 0;
            }
    }   
}

此处第一个控制台日志的输出是

hi there you are in new run now03undefined jquery.solari.letters.js:386

正如你所看到的,timesran []回归未定义。这让我很伤心。

我能正确处理吗?我一直在努力工作大约7个小时来完善代码,这是我最后的挂断。谢谢你的帮助!!!

2 个答案:

答案 0 :(得分:2)

这不起作用,因为您将rando数组设置为Math.floor的变量(Math.random()* 4 + 1);你应该更新它rando [a] = Math.floor(Math.random()* 4 + 1);

答案 1 :(得分:0)

您正在将变量 rando 创建为数组,然后用数字覆盖它 - 随机提取的结果 - 同时丢弃旧数组值,然后将其索引为阵列。最好的方法是简单地设置:

timestorun[a] = rando;

而不是

timestorun[a] = rando[a];

并将变量直接分配给数字 - 而不是:

var rando = [];
rando = Math.floor(Math.random()*4+1);

仅使用

var rando = Math.floor(Math.random()*4+1);