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不,这不是“范围”问题。范围是关于符号的可见性。