javascript - 为什么这个函数会调用两次?

标签 javascript function

JS 新手,仍在学习,但正在为学校编写一个计算器。我已经完成并解决了所有问题,但有一个小问题我无法查明。任何帮助表示赞赏。一切正常,但“answer”函数被连续调用两次。第一次出现时,一切都正确,但第二次它显示我的一个变量未定义。显然我只需要它第一次就正确显示。我错过了什么?

var number1;
var number2;
var operator;
var total;
var runagain;

function main()
{
    inputNumbers();
    assignment();
    answer();
    keepgoing();
}

function inputNumbers()
{
    number1 = parseInt(prompt("Enter Your First Number", 0));
    while(isNaN(number1))
    {
        alert("You did not enter a valid number. Please try again.");
        number1 = parseInt(prompt("Enter Your First Number", 0));
    }
    number2 = parseInt(prompt("Enter Your Second Number", 0));
    while(isNaN(number2))
    {
        alert("You did not enter a valid number. Please try again.");
        number2 = parseInt(prompt("Enter Your Second Number", 0));
    }
}

function assignment()
{
    operator = parseInt(prompt("Enter a '1' for addition\n" + "Enter a '2' for subtraction\n" + "Enter a '3' for multiplication\n" + "Enter a '4' for division\n" + "Enter a '5' for modulus/remainder"));

    if(operator == 1)
    {
        add();
        operator = " + ";
        answer(operator);
    }

    else if(operator == 2)
    {
        subtract();
        operator = " - ";
        answer(operator);   
    }
    else if(operator == 3)
    {
        multiply();
        operator = " * ";
        answer(operator);   
    }
    else if(operator == 4)
    {
        divide();
        operator = " / ";
        answer(operator);   
    }
    else if(operator == 5)
    {
        modulus();
        operator = " % ";
        answer(operator);   
    }
}

function add()
{
    total = number1 + number2;
}

function subtract()
{
    total = number1 - number2;
}

function multiply()
{
    total = number1 * number2;
}

function divide()
{
    total = number1 / number2;
}

function modulus()
{
    total = number1 % number2;
}

function answer(operator)
{
    alert("Your calculation was: " + number1 + operator + number2 + " = " + total);
}

function keepgoing()
{
    runagain = confirm("Would you like to make another calculation?");

    if(runagain === true)
    {
        main();
    }
}

最佳答案

您在此函数中调用answer():

function main()
{
inputNumbers();
assignment();
answer(); // <- here
keepgoing();
}

但是您还可以调用 assignment(),它会返回 answer() 函数:

function assignment()
{
    operator = parseInt(prompt("Enter a '1' for addition\n" + "Enter a '2' for subtraction\n" + "Enter a '3' for multiplication\n" + "Enter a '4' for division\n" + "Enter a '5' for modulus/remainder"));

    if(operator == 1)
    {
        add();
        operator = " + ";
        answer(operator); // <- here, and also in subsequents if/else blocks
    }

...

旁注:如果您打算以十进制系统进行解析,则应始终将 parseInt 与添加的 parseInt(x,10) 参数一起使用。

关于javascript - 为什么这个函数会调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536352/

相关文章:

javascript - (X-Editable) with (Select2 Tags) 不起作用,无法填充当前标签并跟踪和添加/删除标签

c++ - 使用 lambda 作为 C++ 函数的参数

python - 如何创建一个函数来查看字符串中的单个字母?

bash - 测试 Bash 函数返回值的正确方法是什么?

javascript - 根据 AngularJS 中的两个变量进行升序排序/排序

javascript - 如何修复 JavaScript 中的 Number.isInteger() 函数

javascript - Azure 单点登录发布请求时出现 403 禁止错误

javascript - 使用字符串替换将变量传递到正则表达式

c - C 中的上层函数

c++ - 如何在 C++ 中设计错误代码?