Javascript变量保持未定义

Javascript variable stays undefined

本文关键字:未定义 变量 Javascript      更新时间:2023-09-26

我对这个脚本有一个问题,有些事情是错误的。rnumber保持未定义。该脚本应该返回并写入随机数列表中的所有不均匀数字。谁能告诉我我哪里做错了。提前感谢

var Rnumber = new Array();
for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
//  document.write(Rnumber[i] + "<br/>");
}
function unevenAndDivisible(Rnumber)
{
    var remainder = new Array();    
    for (i = 0; i<= 100; i++)
    {
        remainder = parseInt(Rnumber[i])%2;
    }
    return remainder;
}
document.write(unevenAndDivisible());

更改为

var Rnumber = new Array();
for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
//  document.write(Rnumber[i] + "<br/>");
}
function unevenAndDivisible(Rnumber)
{
    var remainder = new Array();
    for (i = 0; i<= 100; i++)
    {
        remainder[i] = Rnumber[i]%2;
    }
    return remainder;
}
document.write(unevenAndDivisible(Rnumber));

,但现在我得到的结果:0 1 0 0 1 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1…

我只是想,也许我第一次问错了,从随机的r个数列表中写出所有的不等数然后我需要把它除以7然后返回。

编辑

几乎所有的问题都很清楚,谢谢大家。他们还剩下一个问题:在下面的代码中,它只从余数中取第一个不均匀的值,我希望它取所有不均匀的值到下一个if语句来检查%7。如果您自己运行它,可能会更好地看到问题

var Rnumber = new Array();
for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
}
function unevenAndDivisible()
{
    var remainder = [];
    var answer = [];
    for (i = 0; i<= 100; i++)
    {
        if (Rnumber[i]%2 !== 0)
        {
            remainder.push(Rnumber[i]); 
            for (c = 0; c <= remainder.length;c++)
            {
                if (remainder[c]%7 == 0)
                {
                    answer.push(remainder[c]);
                }
            }           
        }
    }
    return answer;
}
answer = unevenAndDivisible();
document.write(answer);

问题解决了,谢谢大家

您不需要将Rnumber传递给函数,因为它已经在作用域中可用:

function unevenAndDivisible()
    {
        var remainder = [];
        for (i = 0; i<= 100; i++)
        {
            if (Rnumber[i]%2 !== 0) {
                remainder.push(Rnumber[i]);
            }
        }
        return remainder;
    }
remainder = unevenAndDivisible();
console.log(remainder);

JS Fiddle demo.


编辑回应OP的问题(在对问题的评论中,上面):

…谁能解释一下这是什么意思:var remainder = [];

当然,它是数组字面值表表法,等于:var remainder = new Array();,它只是更简洁一点,我更喜欢节省自己的输入。我得到的印象,从JS Lint,每当我使用var x = new Array();在上面的版本通常是首选(因为它抱怨否则),但我不知道为什么。

要么将Rnumber传递给函数unevenAndDivisible,要么将其从参数列表中省略。因为它是一个参数,所以它比Rnumber的初始声明具有更大的局部作用域。

你的问题是行

function unevenAndDivisible(Rnumber)

你在传递Rnumber in作为一个参数,但是当你调用unevenAndDivisible()你不是在传递它。因此,对于函数体Rnumber是未定义的(因为您没有传入任何内容)

下面的代码片段等价于你写的代码,可能会更好地解释

function unevenAndDivisible(xyz)
{
    var remainder = new Array();    
    for (i = 0; i<= 100; i++)
    {
        remainder = parseInt(xyz[i])%2;
    }
    return remainder;
}

则称为

unevenAndDivisible(undefined)

要修复它,请从调用定义中删除实参

。定义为

function unevenAndDivisible()

1 -您没有定义Rnumber值,这是函数参数。2 - in循环,你定义的余数被除数的值,并没有保存在数组中;试一试:

改变:

remainder = parseInt(Rnumber[i])%2;

remainder[i] = parseInt(Rnumber[i])%2;  
var array = [],
    i = 100;
while (i--) {
    var random = Math.random()*i|0;
    if(random % 2)
       array.unshift(random);
}
alert(array);