Me gustaría almacenar varias funciones y sus parámetros en una matriz que luego repetiré y ejecutaré. Al poner los paréntesis alrededor de los parámetros, la función se ejecuta inmediatamente y su valor de matriz se vuelve indefinido. Me gustaría evitar que esto suceda y llamar a la función (con su(s) parámetro(s)) más adelante. Aquí hay un ejemplo de lo que estoy tratando de lograr ...
function getTableAssignments(callbacks) { $.ajax({ method: "POST", datatype: "jsonp", url: base_url + "users/getTableAssignments/" + event_id }).done(function (data) { tables = data; if (callbacks.length > 0) { $.each(callbacks, function (i, v) { v(); }); } }); } getTableAssignments([func1(param1, param2), func2, func3(param3)]);Almacenar los parámetros es el problema. Aquí se explica cómo almacenar las referencias a funciones:
getTableAssignments([func1, func2, func3]);Aquí se explica cómo vincular los parámetros a las funciones antes de la ejecución. Esto devuelve una nueva función. Hay otras formas de hacerlo, pero creo que esta sería la más sencilla.
var boundFunc1 = func1.bind(null, param1, param2); var boundFunc3 = func3.bind(null, param3); getTableAssignments([boundFunc2, func2, boundFunc3]);También puede almacenar sus parámetros en un objeto como matrices y buscar esos parámetros almacenados con el nombre de la función, pero eso parece complicado, por lo que no explicaré ese método (y requeriría que cambie la llamada para codificar la búsqueda Los parametros).
Si no has leído sobre bind, te recomiendo este video
Necesitas usar expresiones de función:
getTableAssignments([ function() {func1(param1, param2); }, func2, function() {func3(param3); } ]);Creo que las funciones de flecha serían una forma ingeniosa de hacer esto:
function func1 (param) { console.log("func1 : " + param); } function func2 () { console.log("func2"); } function func3 (param1, param2) { console.log("func3 : " + param1 + ", " + param2); } function executeFunctions(funcs) { for (var i = 0, len = funcs.length; i < len; i++) { funcs[i](); } } favorateParam = "bob"; executeFunctions([ ()=>func1("dad"), ()=>func2(), ()=>func3("jane",favorateParam) ]);