Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的随机数函数总是返回相同的输出?_Javascript_Function_Random_Numbers_Closures - Fatal编程技术网

Javascript 为什么我的随机数函数总是返回相同的输出?

Javascript 为什么我的随机数函数总是返回相同的输出?,javascript,function,random,numbers,closures,Javascript,Function,Random,Numbers,Closures,我有以下代码: var lives = 10; var score = 0; var input = $('#input'); var board = $('#board'); var validate = $('#validate'); function randomNum(min, max) { return Math.random() * (max - min) + min; } var levelOne = (randomNum(0, 999)); var levelTwo

我有以下代码:

var lives = 10;
var score = 0;
var input = $('#input');
var board = $('#board');
var validate = $('#validate');

function randomNum(min, max) {
    return Math.random() * (max - min) + min;
}

var levelOne = (randomNum(0, 999));
var levelTwo = (randomNum(999, 1999));

$('#generate').click(function () {
    if (score > 1) {
        board.html(levelOne);
        console.log(levelOne)
        setTimeout(function () {
            board.fadeOut();
        }, 3000);
    } else {
        board.html(levelTwo);
        console.log(levelTwo)
        setTimeout(function () {
            board.fadeOut();
        }, 3000);
    }
});
第一个数字按预期输出,但如果我继续生成数字,日志会说是同一个数字,而且我在屏幕上看不到它(超时也不起作用?)。我已经在Objective-C中完成了这个游戏,但现在在JS中,我的逻辑中缺少了一些东西。有人能给我一个提示吗

编辑:我试过这个

$('#generate').click(function () {
    var levelOne = (randomNum(0, 999));
    if (score > 1) {
        board.html(levelOne);
        console.log(levelOne)
        setTimeout(function () {
            board.fadeOut();
        }, 3000);
    } // etc
}

如果,则也在
内。我不明白为什么我总是得到相同的号码

您正在单击处理程序外部缓存变量
levelOne
levelTwo
,因此随机数只生成一次,如果希望重复重新生成,请将这些行放入单击处理程序中,如下所示:

var lives = 10;
var score = 0;
var input = $('#input');
var board = $('#board');
var validate = $('#validate');

function randomNum(min, max) {
    return Math.random() * (max - min) + min;
}

$('#generate').click(function () {
    if (score > 1) {
        var levelOne = randomNum(0, 999);
        board.html(levelOne);
        console.log(levelOne)
        setTimeout(function () {
            board.fadeOut();
        }, 3000);
    } else {
        var levelTwo = randomNum(999, 1999);
        board.html(levelTwo);
        console.log(levelTwo)
        setTimeout(function () {
            board.fadeOut();
        }, 3000);
    }
});

正在传递给
$(“#生成”)的函数。单击(
)将在单击
#generate
时运行。您是将
levelOne
levelTwo
设置在该功能的内部还是外部?外部。那么这是一个范围问题吗?语句
varlevelone=(randomNum(0999))
的意思是“获取一个介于0和999之间的随机数,然后将
levelOne
的值设置为该值。”它不会使
levelOne
成为“获取一个随机数”的别名。我不明白@Pointy@Mellville您发布的代码只包含一个对
randomNum()
的调用。嗯,两个电话,但每个只发生一次。当调用“click”处理程序时,不再生成随机数;它只是查看先前生成的原始文件。@Mellville不,这不是“范围”问题。范围是关于符号的可见性。