在一个函数中执行多个函数

时间:2018-12-20 12:35:38

标签: javascript function

function executeActions(param)
{
    if((param != undefined) && (param.length > 0))
    {
        for(i=0; i < param.length; i++)
        {
            //eval like function
            param[i]();
        }
    }
}

function clearFields()
{
    ...
}

function showAbs(param)
{
    if(param ==  'insert')
    {
        ...
    }
    else if(param  == 'update')
    {
        ...
    }
    else
    {
        ...
    }
}

$("#clearButton").click(function(event)
{
    //var functions = ["clearFields()","showAbs('insert')"];

    var a = showAbs('insert');
    var functions = [clearFields, a];

    executeActions(functions);
});

大家好! 如何像上面显示的那样在一组指令中连续执行带有参数的某些功能?

如果它们没有任何参数,则函数将像链中一样执行,但是,如果其中一个或多个使用 一些参数,它停止并显示错误:“ param [i]不是函数”。

如果您对此代码有另一个优雅的解决方案,请与我们分享。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

您可以为此使用部分应用程序。部分应用意味着您采用了给定的功能并为其修复了一个或多个参数。例子

function sum(a, b){
    return a + b;
}

function product(a, b){
    return a * b;
}

function doSomething(){
    // do something
}

function runFunctions(funcs){
    for(var i = 0;i<funcs.length;i++){
        funcs[i]();
    }
}


var mySum = function(){
    return sum(5, 6);
}

var myProduct = function(){
    return product(2, 3);
}

runFunctions(mySum, myProduct, doSomething);

上面使用的是ES 5语法。您可以使用ES 6语法使此内容更加简洁:

const sum = (a, b) => a + b;
const product = (a, b) => a * b;
const doSomething = () => // do something


const runFunctions = funcs => {
    for(func of funcs)
        func();
}


var mySum = () => sum(5, 6);
var myProduct = () => product(2, 3);

runFunctions(mySum, myProduct, doSomething);

或者您可以使用bind函数来修复变量:

const sum = (a, b) => a + b;
const product = (a, b) => a * b;
const doSomething = () => // do something


const runFunctions = funcs => {
    for(func of funcs)
        func();
}

runFunctions(sum.bind(null, 5,6), myProduct.bind(null, 2,3), doSomething);

答案 1 :(得分:0)

对我来说,其他开发人员可能无法理解您想要实现的方法。 您可以创建一个将所有函数执行分组的函数,例如:

function groupedFunctions{
    return {
       A: funcA(param),
       B: funcB(param),
       C: funcC(param)
    }
}

function executeActions(funcObj, params) {
   funcObj.A(params.a);
   funcObj.B(params.b);
}

let params = {a: 1, b:2}
executeActions(groupedFunction(), params)