函数被调用两次 - 一次是正确的值,一次是错误的值

时间:2017-05-11 23:01:43

标签: javascript function conditional

这是第一篇文章,我也不熟悉编码,所以希望问题很清楚。

我正在做一个基本的JavaScript练习。除了一个问题外,该程序主要是因为我需要它。

该程序会填充一系列警报。例如,如果您选择数学,然后在接下来的三个警报中输入:1,+,1,它将返回"您的答案是2" (哪个是对的)。然而,然后,它随后显示了噢哦!问题!!',这是不对的。

我无法弄清楚为什么会这样?

我已粘贴下面的相关代码。此外,所有代码都在https://jsfiddle.net/poc4kzm9/

//////////////// MATHS CALCULATOR //////////////////////////

// logic for maths calculation
function mathCalculate(operator, firstNumber, secondNumber) {
  console.log(operator);
  if (operator === '+') {
    add(firstNumber, secondNumber);
  } else if (operator === '-') {
    subtract(firstNumber, secondNumber);
  } else if (operator === '/') {
    divide(firstNumber, secondNumber);
  } else if (operator === '*') {
    multiply(firstNumber, secondNumber);
  } else if (operator === 'sq') {
    power(firstNumber, secondNumber);
  } else if (operator ==='sqrt') {
    squareRoot(firstNumber);
  } else {
    alert('Uh oh! Problem!!');
  }
}

// collect required values for math
function mathSetup() {
  // Set intial values for math calculator
  const firstNumber = prompt('What is your first number?');
  const operator = prompt('Which operator would you like to use? (+, -, /, *, sq, sqrt)');
  let secondNumber;

  // No need for a second number if sqrt-ing the first value
  if (operator !== 'sqrt') {
    secondNumber = prompt('What is your second number?');
  }
  mathCalculate(operator, firstNumber, secondNumber);
}

// The various functions by operator, one for each operator
function add(a,b) {
  alert('Answer is ' + (parseFloat(a) + parseFloat(b)));
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您两次调用mathCalculate方法。

第一次在mathSetup,另一次是你的主循环。第二次你没有参数调用它。这就是为什么你对问题保持警惕。

要解决此问题,您必须从matchCalculate中删除switch。另一种方法是从mathSetup返回数据并在mathCalculate

中使用它

我也做了小提琴:https://jsfiddle.net/5bh9ndhc/

我从mathSetup返回了数据,我在mathCalculate中使用了它:

const [operator, firstNumber, secondNumber] = mathSetup();
mathCalculate(operator, firstNumber, secondNumber);

请注意,我使用了解构分配器。此语法是ECMAScript 2015的一部分,因此它仅适用于少数现代浏览器。

UPD:我强烈建议在这种情况下使用debugger关键字。您的代码有很多行,我在生命中第一次看到它,但由于debugger关键字和Chrome Devtools,我能够在30秒内找到错误。

答案 1 :(得分:0)

您正在调用计算功能两次

设置功能中的一个

function mathSetup() {
  // Set intial values for math calculator
  const firstNumber = prompt('What is your first number?');
  const operator = prompt('Which operator would you like to use? (+, -, /, *, sq, sqrt)');
  let secondNumber;

  // No need for a second number if sqrt-ing the first value
  if (operator !== 'sqrt') {
    secondNumber = prompt('What is your second number?');
  }
  mathCalculate(operator, firstNumber, secondNumber);
}

并在安装后

  mathSetup();
  mathCalculate();

在此时从开关案例中删除计算功能,您没有关于计算的信息。小提琴链接 - https://jsfiddle.net/ezmhc0ff/