控制台日志输出整个函数而不是返回的函数

时间:2014-01-16 16:29:25

标签: javascript function nested

我刚开始学习JavaScript并决定使用迄今为止我所获得的有限知识制作Rock-Paper-Scissors游戏。但是,我无法弄清楚它输出的原因

I chose function (userChoice)
    {
        if(userChoice==="Rock")
            return "Paper";

        if(userChoice==="Paper")
            return "Scissors";

        if(userChoice==="Scissors")
            return "Rock";
    }. I win noob.

而不仅仅是“我选择了Rock。我赢了noob。”

这是我的代码:

var main = function()
{
    var yesno = confirm("Would you like to play Rock-Paper-Scissors?");

    if(yesno === false)
        return "You're lame.";

    var userChoice = prompt("Rock, Paper, or Scissors?");

    var cheat = function(userChoice)
    {
        if(userChoice==="Rock")
            return "Paper";

        if(userChoice==="Paper")
            return "Scissors";

        if(userChoice==="Scissors")
            return "Rock";
    };

    return "I chose " + cheat + ". I win noob.";
};

console.log(main());

我发现它的工作原理是将cheat函数移到main函数之外和之上并调整一些东西,代码按预期工作。我只是无法弄清楚为什么一种方法有效,而另一种方法没有。

2 个答案:

答案 0 :(得分:3)

您忘记了()

return "I chose " + cheat(userChoice) + ". I win noob.";

使用括号,JavaScript将在字符串中插入函数,而不是调用它并插入结果。

答案 1 :(得分:0)

您需要将cheat作为函数传递 -

return "I chose " + cheat(userChoice) + ". I win noob.";

您必须再次传入userChoice,因为function(userChoice)调用要求变量,并将其称为userChoice。但是,它实际上并未使用先前建立的userChoice变量。