每次在Javascript中调用函数时生成一个新的随机数

每次在Javascript中调用函数时生成一个新的随机数,javascript,function,Javascript,Function,我正在尝试学习javascript,我正在玩一个随机数的游戏 我想有两个函数,随机和猜测。随机生成一个介于1-10之间的新数字。Guess用于检查数字是否被猜到,如果没有,则重新运行random函数并生成一个新数字以供尝试 var x; function random(){ let x = Math.floor((Math.random() * 10) + 1); guess(); } function guess(x){ if(x === 3){ a

我正在尝试学习javascript,我正在玩一个随机数的游戏

我想有两个函数,随机和猜测。随机生成一个介于1-10之间的新数字。Guess用于检查数字是否被猜到,如果没有,则重新运行random函数并生成一个新数字以供尝试

var x;
function random(){
    let x = Math.floor((Math.random() * 10) + 1);
    guess();
 }

function guess(x){
    if(x === 3){
        alert('you are correct!');
    }else{
        alert('try again');
        random();
    }
}

random();
我猜这只是提醒您每次重试,因为它不会在每次调用函数时生成新的数字

如何创建随机函数,使其在每次调用时生成一个新数字


*****更正,它似乎生成了一个新的数字,但在guess函数**

中x未定义,
guess()中的
x
是作为参数传递给它的
x
。我会删除
var x声明并在调用时传递值,如
guess(x)

函数随机(){
常数x=数学楼层((数学随机()*10)+1);
猜测(x);
}
函数猜测(x){
如果(x==3){
警惕(“你是对的!”);
}否则{
警报(“重试”);
随机();
}
}
随机();

我对您的代码做了一些更改。 您对函数调用函数的概念有疑问。 在实际代码中,它会杀死你的内存。。您的函数调用函数未关闭的函数,并一次又一次地调用函数。。。它充满了记忆

var x;
// flag correct will close the loop when you have right umber 
var correct = false;
function random() {
    x = Math.floor((Math.random() * 10) + 1);
    guess(x);
}

function guess(x) {
    if (x === 3) {
        alert('you are correct!');
        // if number is right flag is up 
        correct = true;
    } else {
        alert('the number is ' + x + ' try again');
    }
}
// loop until the number is right
while (correct != true) {
    random();
}

下面是一些详细的代码,可以帮助您了解如何在浏览器中运行这样的游戏

请参阅注释以了解其工作原理(并搜索上的信息以了解有关任何特定主题的更多信息)

快乐编码

//标识HTML元素
常数
guessInput=document.getElementById(“guessInput”),
output段落=document.getElementById(“output段落”);
//生成所有函数都可以访问的全局变量
让全球数;
//调用主函数
游戏();
函数playGame(){
//调用randomizer函数并将结果存储在全局变量中
globalNum=getRandomNumber();
//console.log(globalNum);
//调用输出函数
setOutput(“从1到10猜一个数字”);
//指定用户更改输入字段时将调用的函数
猜测输入。addEventListener(“更改”,响应guess);
//将焦点放在输入元素中
guessInput.focus();
}
//定义可以自动查看触发事件的侦听器函数
函数响应(事件){
//获取事件的'target'元素并将其存储在局部变量中
const localReferenceToInputElement=event.target
//``元素的文本存在于其“value”属性中
const inputText=localReferenceToInputElement.value;
//尝试将文本字符串转换为整数(并将其作为“guess”本地存储)
让猜测=parseInt(inputText);
//如果转换失败,则相应地更改输出
如果(!guess){setOutput(“请输入有效数字”);}
//如果数字超出范围,则更改输出
else if(guess<1 | | guess>10){setOutput(“只允许1到10之间的数字”);}
//如果猜测与存储的数字不匹配,则更改输出
else如果(猜测!==globalNum){setOutput(“重试…”);}
//如果我们走到这一步,猜测是正确的,所以改变输出并结束游戏
否则{
setOutput(“你猜对了!”);
重置();
}
}
函数getRandomNumber(){
//将随机数返回到调用此函数的任何函数中
常数x=数学楼层((数学随机()*10)+1);
返回x;
}
函数setOutput(输出文本){
//段落元素的文本位于其'innerHTML'属性中
outputParagation.innerHTML=输出文本;
}
函数重置(){
//清除输入并停止侦听更改
猜输入值=”;
猜测输入。removeEventListener(“更改”,respondToGuess);
}


函数的签名表示它接受一个参数
x
,但是调用函数时,您没有向函数传递任何值,因此它在运行
guess
时将
未定义的
赋值给
x
,这永远不会等于
3
。您可以采取两种方法来解决此问题。首先,您可以将
x
作为一个全局变量,方法是去掉
let
,在
random
函数中定义
x
,并从
guess
的函数签名中删除
x
,如下所示:

varx;
函数随机(){
x=数学楼层((数学随机()*10)+1);
猜();
}
函数猜测(){
如果(x==3){
警告(x+“-你是对的!”);
}
否则{
警报(x+“-重试”);
随机();
}
}

随机()
Your
guess
函数期望该数字作为参数。用随机值像
guess(3)
guess(x)
一样调用它。同时删除全局
变量x
,您没有在任何地方使用它。@Bergi如果有效,我在随机函数中添加了猜测(x)。非常感谢。谢谢你提供的所有信息!这肯定有助于我更好地理解这一点