JS에 익숙하지만 여전히 배우고 있지만 학교용 계산기를 쓰고 있습니다. 나는 꽤 많이 끝났고 모든 꼬임을 해결했지만 작은 문제가있어 정확하게 찾아 낼 수 없습니다. 어떤 도움을 주셔서 감사합니다. 모든 것이 작동하지만 "응답"기능은 두 번 연속 호출됩니다. 처음 나타 났을 때 모든 것이 옳았지만 두 번째로 내 변수 중 하나가 정의되지 않은 것으로 표시됩니다. 나는 분명히 처음으로 올바르게 보여 주기만하면된다. 내가 뭘 놓치고 있니?이 함수가 두 번 호출하는 이유는 무엇입니까?
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();
}
}
을 할 수 정의되지 않은 주요 함수에서 호출되는 다음 시간을 정의 할 때이 할당 함수에서의 호출 처음 HTML을 추가 하시겠습니까? –
당신은'if()'체인의 조건을 변경하고 있습니다. 연산자를 테스트 한 다음 일치가 완료되면 변경합니다. 그것은 결코 좋은 생각은 아니지만,이 경우에 당신은 운이 좋았고 실제 운영에 영향을 미칠 수있는 모양으로 바꾸지 않았습니다. –
몇 가지 제안 : 매개 변수에서'operator()'를'answer()'메소드로 제거하십시오. 이미 글로벌 범위에 정의되어 있습니다. 또한, if/else 대신에'assign()'메쏘드에서'switch' 문을 사용하십시오. –