有人能帮助我理解为什么第一个函数工作,而第二个返回未定义?我很困惑为什么第二个设置不工作,它不会运行并返回相同的加/减/乘/除函数一旦满足情况子句?谢谢!
:
//Add function
let add = (a, b) => a + b;
//Subtract function
let subtract = (a, b) => a - b;
//Multiply function
let multiply = (a, b) => a * b;
//Divide function
let divide = (a, b) => a / b;
// Variables to represent number, operator, number
let number1st;
let number2nd;
let operator;
// Operate function
let operate = function (op, a, b) {
switch (op) {
case 'add':
op = add;
break;
case 'subtract':
op = subtract;
break;
case 'multiply':
op = multiply;
break;
case 'divide':
op = divide;
break;
}
op (a, b);
}
行不通:
let operate = function (op, a, b) {
switch (op) {
case 'add':
add (a, b);
break;
case 'subtract':
subtract (a, b);
break;
case 'multiply':
multiply (a, b);
break;
case 'divide':
divide (a, b);
break;
}
}
这个问题有点模糊,也许下次试着提供一些输入,这样人们就可以更好地了解你的问题。
此外,值得注意的是,两个operation()函数都不返回任何值。因此,无论调用哪个函数,都不会得到任何输出。
我对你的代码做了以下修改:
let number1st = 1;
let number2nd = 1;
let operator = 'add';
let operate = function (op, a, b) {
switch (op) {
case 'add':
op = add;
break;
case 'subtract':
op = subtract;
break;
case 'multiply':
op = multiply;
break;
case 'divide':
op = divide;
break;
default:
// add something here if you wish
break;
}
return op (a, b); // changed here
}
let result = operate(operator, number1st, number2nd);
console.log(result);
let operate2 = function (op, a, b) {
switch (op) {
case 'add':
return add (a, b); // changed here
case 'subtract':
return subtract (a, b); // changed here
case 'multiply':
return multiply (a, b); // changed here
case 'divide':
return divide (a, b); // changed here
default:
// add something here if you wish
break;
}
}
let result2 = operate2(operator, number1st, number2nd);
console.log(result2);
在第一种情况下,我在op(a, b)
调用中添加了return
语句,因此operate()
将返回op(a, b)
返回的内容。
在第二种情况下,我删除了所有break
语句,并用return
+特定的操作调用代替它们(假设op = 'add'
,它将转到第一个切换情况,计算值,返回它并返回函数最初调用的位置)。这类似于断开开关。
提示,始终考虑默认情况(即指定的情况都没有发生)。
让我知道这个解释是否有帮助:)