Javascript 当我多次运行该函数时,是否有方法保留使用Math.random生成的变量

Javascript 当我多次运行该函数时,是否有方法保留使用Math.random生成的变量,javascript,Javascript,我正在尝试制作一个游戏,当你必须猜一个由JavaScript中的Math.random()函数生成的数字时。但我意识到,当我这样做的时候,如果他们得到了错误的数字,我必须重新运行这个函数。然后,该数字在重新运行该函数时重新生成。是否有一种方法可以使变量保持不变,直到我想更改它。我打算使用const函数来更改它,但我意识到它也会做同样的事情。这是我的全部代码: var=5; var howMany=0; var=0; 变量player1=0; 变量player2=0; var triesmulti

我正在尝试制作一个游戏,当你必须猜一个由JavaScript中的
Math.random()
函数生成的数字时。但我意识到,当我这样做的时候,如果他们得到了错误的数字,我必须重新运行这个函数。然后,该数字在重新运行该函数时重新生成。是否有一种方法可以使变量保持不变,直到我想更改它。我打算使用
const
函数来更改它,但我意识到它也会做同样的事情。这是我的全部代码:

var=5;
var howMany=0;
var=0;
变量player1=0;
变量player2=0;
var triesmulti=10;
var回合='player 1';
var数;
函数start(){
var min=document.getElementById('min')。值;
var max=document.getElementById('max').value;
数字=数学地板(数学随机()*(+max-+min))+min;
如果(尝试<1){
警报('您\n没有更多的尝试了。号码是\n'+number);
试验次数=5次;
错误+=1;
document.getElementById('error').innerHTML='您的数字搞错了'+搞错了+'次';
}否则{
var guess=prompt();
如果(猜测==数字){
警报('您的号码对了!\n'+号码);
多少+=1;
试验次数=5次;
document.getElementById('howMany').innerHTML='您已经猜到了数字'+howMany+'次';
document.getElementById('tries').innerHTML='您还有5次尝试';
}否则{
警惕('你打错号码');
尝试-=1;
document.getElementById('tries').innerHTML='youhave'+tries+'tries left';
设置超时(开始,1000);
}
}
}
函数多人游戏(){
var min=document.getElementById('minm').value;
var max=document.getElementById('maxm').value;
数字=数学地板(数学随机()*(+max-+min))+min;
如果(triesmulti<1){
警报('您\n已没有剩余的重试次数\n'+个);
triesmulti=10;
document.getElementById('triesmulti').innerHTML='每个玩家有5次尝试';
}否则{
var GUSE=提示(转);
如果(回合==“玩家1”){
如果(猜测==数字){
警报('您的号码对了!\n'+号码);
player1+=1;
triesmulti=10;
document.getElementById('triesmulti').innerHTML='每个玩家有5次尝试';
}否则{
警惕(“你打错电话了!”);
回合='玩家2';
设置超时(多人游戏,1000);
}
}否则,如果(回合==“玩家2”){
如果(猜测==数字){
警报('您的号码对了!\n'+号码);
player2+=1;
triesmulti=10;
document.getElementById('triesmulti').innerHTML='每个玩家有5次尝试';
}否则{
警惕(“你打错电话了!”);
回合='player1';
设置超时(多人游戏,1000);
}
}
}
}

如果您看到,在
setTimeout()
中,它会重新运行函数。

好吧,您的代码没有组织,有很多重复项,您可以将其划分为函数,您可以添加一个布尔变量,以便在更改数字时进行检查,我不知道你的HTML代码或css,但我只是根据你的选择器添加了这些元素,你也可以更改多人游戏功能

var=5;
var howMany=0;
var=0;
变量player1=0;
变量player2=0;
var triesmulti=10;
var回合='player 1';
var数;
var isAlreadyPlaying=假;
函数start(){
var min=document.getElementById('min')。值;
var max=document.getElementById('max').value;
如果(!isAlreadyPlaying){
isAlreadyPlaying=true;
数字=数学地板(数学随机()*(+max-+min))+min;
}
如果(尝试<1){
警报('您\n没有更多的尝试了。号码是\n'+number);
试验次数=5次;
错误+=1;
document.getElementById('error').innerHTML='您的数字搞错了'+搞错了+'次';
isAlreadyPlaying=false;
}否则{
var guess=prompt();
如果(猜测==数字){
警报('您的号码对了!\n'+号码);
多少+=1;
试验次数=5次;
document.getElementById('howMany').innerHTML='您已经猜到了数字'+howMany+'次';
document.getElementById('tries').innerHTML='您还有5次尝试';
isAlreadyPlaying=false;
}否则{
警惕('你打错号码');
尝试-=1;
document.getElementById('tries').innerHTML='youhave'+tries+'tries left';
设置超时(开始,1000);
}
}
}
Min
最大值


您可以使用对象或闭包轻松创建有状态随机数生成器:

const rndRng=(lo,hi)=>~~(Math.random()*(hi-lo)+lo);
常数intRng=(低,高)=>{
设n=rndRng(低,高);
返回{
下一步:()=>(n=rndRng(低,高)),
获取:()=>n
};
};
常数rng=intRng(10,20);
console.log(rng.get());
console.log(rng.get());
rng.next();
console.log(rng.get());

console.log(rng.get())欢迎来到SO!这很容易通过闭包实现,但我建议重新思考一下您的设计。避免全局变量、重复代码、在与业务逻辑相同的地方操作DOM等。有点太宽了,无法提供完全重写,但是一旦您完成了工作,请考虑标题。@ GGORLEN,我将重新编写代码。我想我将不得不做一些不同的事情。你不必——你可以用你所拥有的让它工作。但这是值得的