我创建了一个回调函数并声明了一次但它会做多项任务我该怎么做?

问题描述

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,minus)
 var userOutput_3 = result(5,multiply)
 var userOutput_4 = result(5,divided)

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

仔细看上面的代码

你可以看到我写了一个名为 result函数。它的value_1、value_2、callback我取了这三个参数。然后我想找到value_1和value_2的和、减、乘、除。以下是作为回调参数的参数的加法、减法、乘法和除法的单独函数。我声明特定于加法、减法、乘法、除法。但我想传递一个函数作为回调参数参数,其中 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,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,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]);
,

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

function result(value_1,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,operation)
console.log(userOutput);