问题描述
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);