我创建了一个回调函数并声明了一次。但它会做多项任务。我怎样才能做到这一点?

I create a callback function and declare one time. but it'll do multiple task. how can I do this?

function result (value_1, value_2, callback){
  var plus = value_1 + value_2
  var minus = value_1 - value_2
  var multiplication = value_1 * value_2
  var divided = value_1 / value_2

  var output = callback(plus, minus, multiplication, divided)

  return output

}

 function plus (a, b) {
  return a+b
 }

 function minus (a, b) {
  return a-b
 }

 function multiply (a, b) {
  return a*b
 }  

 function divided (a, b) {
  return a/b
 } 

 var userOutput_1 = result(5, 8, plus)
 var userOutput_2 = result(5, 8, minus)
 var userOutput_3 = result(5, 8, multiply)
 var userOutput_4 = result(5, 8, divided)

 console.log(userOutput_1);
 console.log(userOutput_2);
 console.log(userOutput_3);
 console.log(userOutput_4);

仔细看上面的代码.

你可以看到我写了一个函数叫result。它的value_1、value_2、回调这三个参数我都取过了。然后想求value_1和value_2的加减乘除。下面是作为回调参数参数的加法、减法、乘法和除法的单独函数。我声明特定于加法、减法、乘法、除法。但是我想传一个函数作为回调参数实参 where var userOutput_1 = .....; var userOutput_2: .... 就不用多说了。 我可以用一个功能做所有事情

您似乎在寻找

function result (value_1, value_2, callback) {
  var output = callback(value_1, value_2);
  return output;
}

这个函数当然是有点无意义了,调用者应该直接用操作调用函数。为了使其更有用并展示回调的好处,您可以这样做

function compute(value_1, value_2, operation) {
  const name = operator.name;
  const result = operation(value_1, value_2);
  console.log(`${name}(${value_1}, ${value_2}) = ${result}`);
  return result;
}

您可以传递一组回调:

function result(value_1, value_2, callbacks) {
    return callbacks.map(callback => callback(value_1, value_2));
}

然后您可以使用解构赋值将结果解包到变量中:

const [userOutput_1, userOutput_2, userOutput_3, userOutput_4] = result(5, 8, [plus, minus, multiply, divided]);

您可以创建一个包装函数,该函数 returns 包含参数的闭包中的函数数组:

function result(value_1, value_2, callback) {
  return callback(value_1, value_2).map(fn => fn())
}

function operation(a, b) {
  return [
    () => a + b,
    () => a - b,
    () => a * b,
    () => a / b
  ]
}
const userOutput = result(5, 8, operation)
console.log(userOutput);