为什么我不能在javascript中调用另一个函数的函数?

时间:2016-07-10 08:00:03

标签: javascript function methods

<!DOCTYPE HTML>

<head>
<title>
Math game</title>
</head>

<body onload = "guess()">

<script>

function guess(){
var userGuess = prompt("Guess a positive number less than 50");
var userRandomNumber = Math.floor(Math.random() * 49) + 1;
check(userGuess,userRandomNumber);
}

</script>

<script>

function check(guess,randomNumber){

if(parseInt(guess)<0 ){
    alert('Please enter a number in the given range');
    guess();
}else if(parseInt(guess)>=50){
    alert('Please enter a number in the given range');
    guess();
}
else if (parseInt(guess) === randomNumber ) {
    alert('You guessed the number!');
} else if(parseInt(guess) > randomNumber ) {
    alert('Sorry. The number was ' + randomNumber);
}else{
    alert('Sorry. The number was ' + randomNumber );
}
}
</script>

</body>
</html>

所以这是一个数字猜谜游戏,如果用户输入一个超出范围的数字,我想提示用户再次输入一个数字。所以我想从check()函数调用guess()函数。但是这个代码不会给出结果。我是否需要像在Java中一样创建一个类型为guess的对象?如果是这样的话,那我该如何正确创建对象呢?任何帮助表示赞赏=)

2 个答案:

答案 0 :(得分:1)

您对函数和参数使用相同的名称:guess

将参数名称更改为其他名称:

&#13;
&#13;
<head>
<title>
Math game</title>
</head>

<body onload = "guess()">

<script>

function guess(){
var userGuess = prompt("Guess a positive number less than 50");
var userRandomNumber = Math.floor(Math.random() * 49) + 1;
check(userGuess,userRandomNumber);
}

function check(guessNumber,randomNumber){

if(parseInt(guessNumber)<0 ){
    alert('Please enter a number in the given range');
    guess();
}else if(parseInt(guessNumber)>=50){
    alert('Please enter a number in the given range');
    guess();
}
else if (parseInt(guessNumber) === randomNumber ) {
    alert('You guessed the number!');
} else if(parseInt(guessNumber) > randomNumber ) {
    alert('Sorry. The number was ' + randomNumber);
}else{
    alert('Sorry. The number was ' + randomNumber );
}
}
</script>

</body>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

简答

guess函数中的参数check重命名为其他任何内容。

详细答案

check函数 guess 中的参数正在函数的本地范围内创建名为 guess 的变量

当您将其名称更改为其他名称时,请说出 guessnumber 。它不会在函数的本地范围内找到 guess ,并将尝试访问父作用域中的同名变量(在您的情况下是全局作用域),它将找到名称为 guess 的函数,您的代码将完美无缺。

要理解这一点,您也可以从 {{1}更改 guess 功能中对 check 的调用功能} guess() 这也将使您的代码功能正确(在这种情况下,它将直接查找名称为 window.guess() 的函数但是在全球范围内,不推荐这种方法。

了解更多here