hamando a função dinâmica com parâmetros dinâmicos em Javascript [duplicado]

Esta pergunta já tem uma resposta aqui:

Passando uma matriz como um parâmetro de função em JavaScript 10 respostasPassing argumentos encaminhados para outra função javascript [duplicate] 3 respostas

Estou procurando um truque sobre isso. Eu sei como chamar uma função dinâmica e arbitrária em Javascript, passando parâmetros específicos, algo como isto:

function mainfunc (func, par1, par2){
    window[func](par1, par2);
}

function calledfunc(par1, par2){
    // Do stuff here
}

mainfunc('calledfunc','hello','bye');

Eu sei como passar parâmetros opcionais e ilimitados usando a coleção de argumentos [] dentro de mainfunc, mas não consigo descobrir como enviar um número arbitrário de parâmetros para mainfunc para ser enviado para callsfunc dinamicamente; como posso realizar algo assim, mas com qualquer número de argumentos opcionais (sem usar esse @ fe if-else)? :

function mainfunc (func){
    if(arguments.length == 3)
        window[func](arguments[1], arguments[2]);
    elseif(arguments.length == 4)
        window[func](arguments[1], arguments[2], arguments[3]);
    elseif(arguments.length == 5)
        window[func](arguments[1], arguments[2], arguments[3], arguments[4]);
}

function calledfunc1(par1, par2){
    // Do stuff here
}

function calledfunc2(par1, par2, par3){
    // Do stuff here
}

mainfunc('calledfunc1','hello','bye');
mainfunc('calledfunc2','hello','bye','goodbye');

questionAnswers(10)

yourAnswerToTheQuestion