Quiero definir una función:
const f = (outside, param1, param2) => { outside(param1, param2); }Pero sé que esta función siempre se llamará dentro de una función que tiene un parámetro externo. Por ejemplo:
const g = (outside, param3, param4) => { // some code here f(outside, var1, var2); // some more code } ¿Hay alguna forma de definir f para que no tenga que pasar al outside cuando llame al interior de g ?
También quiero poder llamar a f dentro de otras funciones que toman el outside como parámetro, no solo g .
¿Hay alguna forma de definir
fpara que no tenga que pasar aloutsidecuando llame al interior deg?
No. Está solicitando un alcance dinámico , pero JavaScript usa un alcance léxico . Eso significa que la disponibilidad/visibilidad de los símbolos está determinada por la forma en que se definen las funciones, no por cómo/cuándo/dónde se llaman.
Puede cambiar el orden de los argumentos y tomar medidas según su existencia:
const f = (param1, param2, outside) => { if (outside) { outside(param1, param2); } else { ... } }ACTUALIZAR
Desafortunadamente, una función definida fuera de la función g, no tendrá acceso directo a las variables contenidas en la función g. Por esta razón, necesariamente debe pasar el parámetro fuera de la función f.
¿Y si cambias tu lógica así? ¿Se ajustará a tus necesidades?
// Set function logic const f = (param1, param2) => { return param1 + param2; } // Outside method const outside = v => { console.log(`I'm outside: ${v}`); } // Call from outside logic const g = (outside, param3, param4) => { // If you know, that it is outside wrapper, wrap it here outside(f(param3, param4)); } g(outside, 2, 2); // Call from else logic console.log(`I'm else logic: ${f(3, 3)}`);