Javascript Return and if/else

3
对于下面的代码,每次调用alert函数时我都会得到"Scissors",我不确定我的错误在哪里。
var computerChoice = Math.random();

var newChoice = function (computerChoice) {
    if (computerChoice <= 0.34) {
        var newChoice = "rock";
        return newChoice;
    } else if ((computerChoice >= 0.35) && (computerChoice <= 0.66)) {
        var newChoice = "paper";
        return newChoice;
    } else {
        var newChoice = "scissors";
        return newChoice;
    }

}
var newerChoice = newChoice();
alert(newerChoice);

3
在调用newChoice函数时,您没有传递参数,因此函数的参数computerChoice是未定义的。undefined <= 0.34false,其他比较也是如此。 - Felix Kling
7个回答

2
当你调用newChoice时没有传递参数,因此computerChoice参数值为undefinedundefined <= 0.34false,其他比较也是一样。
两种可能的解决方案是:
  • 从函数中删除参数,这样computerChoice将引用全局变量。当前参数遮蔽了与其同名的外部变量。
  • (更好) 使用参数调用函数。

了解更多关于函数的知识


还有第三种解决方案可以在函数内部生成数字,因此不需要传递任何内容:var newChoice = function() { var computerChoice = Math.random(); - MaxZoom
谢谢Felix,我完全忘记了传递参数。而且提到全局变量和未定义的内容非常有帮助-:) - Asim Mahar
@MaxZoom:是的。我的意思并不是只有这两种解决方案。 - Felix Kling
@Max:感谢你提供的第三种解决方案,我刚刚运行了一下以便理解。当然它成功了-:) 变量computerChoice由于打字错误被错误地放在那里,不过还是感谢你指出来。 - Asim Mahar
@MaxZoom,我已经在第一个if语句中将var computerChoice编辑为var newChoice - Asim Mahar

1

似乎有些混淆了变量和参数。这是一些可行的代码...

var newChoice = function (choice) {
    if (choice <= 0.34) {
        return "rock";
    } else if (choice <= 0.66) {
        return "paper";
    } else {
        return "scissors";
    }
};

var computerChoice = Math.random();
var newerChoice = newChoice(computerChoice);
alert(newerChoice);

传递到newChoice的值是参数choice。由于不需要,我删除了&&。如果choice不是<= 0.34,则它必须大于0.34,因此稍后无需进行检查。 computerChoice是传递给函数的随机值变量。
这是一个有效的fiddle示例...

http://jsfiddle.net/ArchersFiddle/0dfhoa63/


1
新选择方法的computerChoice参数在调用newChoice()时未定义。如果您想传递先前生成的数字,可以按如下方式执行:

var computerChoice = Math.random();

var newChoice = function(computerChoice) {
  if (computerChoice <= 0.34) {
    return "rock";
  } else if ((computerChoice >= 0.35) && (computerChoice <= 0.66)) {
    return "paper";
  } else {
    return "scissors";
  }
}
var newerChoice = newChoice(computerChoice);
alert(newerChoice);


"method is null" -> "方法未定义" - Felix Kling
抱歉,我(糟糕地)引用了你的回答的一部分。参数不是null,而是未定义。 - Felix Kling
为什么要这样做呢?也许我还没有表达清楚:你写道:“newChoice方法的computerChoice参数为空。”然而,这是不正确的。当没有传递值时,该参数的值是undefined,而不是null。因此,更正确的说法是:“newChoice方法的computerChoice参数的值为undefined。” - Felix Kling

0

尽管声明了computerChoice作为参数,但实际上您并没有将其作为变量传递给函数。请改为使用var newerChoice = newChoice(computerChoice);而不是var newerChoice = newChoice();。我认为该函数将会寻找作为参数的computerChoice,而不是查看之前的声明。请查阅JavaScript中的变量作用域。


0

你的 newChoice 函数需要一个参数。因此你需要给它一个。

var newerChoice = newChoice(computerChoice);

此外,我认为在第一个if语句中,你想要的是newChoice = "rock";而不是computerChoice = "rock";

-1

仔细看看这一行:

var newChoice = function (computerChoice) {

你创建了一个名为newChoice的函数,并要求一个名为computerChoice的参数。现在让我们看看如何在以后执行该函数。
var newerChoice = newChoice();

你执行了函数 newChoice,但这次没有将 computerChoice 作为参数传递。 解决方法 你可以做的很简单。请修改以下内容:
var newChoice = function (computerChoice) {

进入

var newChoice = function () {

并且让你的newChoice函数生成一个新的值给computerChoice,通过在你的函数中添加computerChoice = Math.random();。像这样:

var computerChoice = Math.random();

var newChoice = function () {
computerChoice = Math.random();
    if (computerChoice <= 0.34) {
        var computerChoice = "rock";
        return newChoice;
    } else if ((computerChoice >= 0.35) && (computerChoice <= 0.66)) {
        var newChoice = "paper";
        return newChoice;
    } else {
        var newChoice = "scissors";
        return newChoice;
    }

}
var newerChoice = newChoice();
alert(newerChoice);


2
我是边学边做的,所以如果有人对我进行了负评,请详细说明原因。提前感谢各位。 - Rizky Fakkel

-1
var newerChoice = newChoice(Math.random());

请问您能否解释一下您的答案。 - Sleek Geek
该函数需要传入一个参数。 - Randy Hunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接