函数被调用两次 - 一次具有正确的值,一次具有错误的值
Function being called twice - once with correct value, once with wrong value
这是第一次 post 而且我也是编码新手,所以希望问题足够清楚。
我正在做一个基本的 JavaScript 练习。除了一个问题外,该程序在很大程度上按照我的需要工作。
该程序会填充一系列警报。例如,如果您 select 数学,然后在接下来的三个警报中输入:1、+、1,它会 returns "Your answer is 2"(这是正确的)。但是,它随后显示 'Uh oh! Problem!!',这是不正确的。
我不明白为什么会这样?
我已经在下面粘贴了相关代码。此外,包含所有代码的 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)));
}
如有任何帮助,我们将不胜感激。
您调用了 mathCalculate
方法两次。
第一次是在 mathSetup
中,另一个是你在 switch 中的主循环。第二次不带参数调用它。这就是为什么您会收到有关问题的警报。
要解决此问题,您必须从 switch
中删除 matchCalculate
。另一种方法是 return 来自 mathSetup
的数据并在 mathCalculate
中使用它
我也做了fiddle:https://jsfiddle.net/5bh9ndhc/
我return编辑了来自mathSetup
的数据,并在mathCalculate
中使用了它:
const [operator, firstNumber, secondNumber] = mathSetup();
mathCalculate(operator, firstNumber, secondNumber);
请注意,我使用了解构分配器。此语法是 ECMAScript 2015 的一部分,因此它仅适用于少数现代浏览器。
UPD:我强烈建议在这种情况下使用 debugger
关键字。你的代码有很多行,我平生第一次看到它,但是由于 debugger
关键字和 Chrome Devtools,我能够在 30 秒内找到错误。
您正在调用计算函数两次
设置函数里面的一个
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();
从 switch case 中删除计算函数,此时您没有关于计算的信息。 Fiddle link - https://jsfiddle.net/ezmhc0ff/
这是第一次 post 而且我也是编码新手,所以希望问题足够清楚。
我正在做一个基本的 JavaScript 练习。除了一个问题外,该程序在很大程度上按照我的需要工作。
该程序会填充一系列警报。例如,如果您 select 数学,然后在接下来的三个警报中输入:1、+、1,它会 returns "Your answer is 2"(这是正确的)。但是,它随后显示 'Uh oh! Problem!!',这是不正确的。
我不明白为什么会这样?
我已经在下面粘贴了相关代码。此外,包含所有代码的 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)));
}
如有任何帮助,我们将不胜感激。
您调用了 mathCalculate
方法两次。
第一次是在 mathSetup
中,另一个是你在 switch 中的主循环。第二次不带参数调用它。这就是为什么您会收到有关问题的警报。
要解决此问题,您必须从 switch
中删除 matchCalculate
。另一种方法是 return 来自 mathSetup
的数据并在 mathCalculate
我也做了fiddle:https://jsfiddle.net/5bh9ndhc/
我return编辑了来自mathSetup
的数据,并在mathCalculate
中使用了它:
const [operator, firstNumber, secondNumber] = mathSetup();
mathCalculate(operator, firstNumber, secondNumber);
请注意,我使用了解构分配器。此语法是 ECMAScript 2015 的一部分,因此它仅适用于少数现代浏览器。
UPD:我强烈建议在这种情况下使用 debugger
关键字。你的代码有很多行,我平生第一次看到它,但是由于 debugger
关键字和 Chrome Devtools,我能够在 30 秒内找到错误。
您正在调用计算函数两次
设置函数里面的一个
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();
从 switch case 中删除计算函数,此时您没有关于计算的信息。 Fiddle link - https://jsfiddle.net/ezmhc0ff/