alguien puede explicar este codigo..? especialmente " acción (i) " en el alcance. soy nuevo en js
function repeat(n,action){ for(let i= 1; i<=n; i++){ action(i); } } repeat(10, console.log); repeat(3, alert);El código anterior simplemente repite una función dada (la función de acción) n cantidad de veces, pasando i (la iteración actual) a la función
p.ej:
repeat(10, console.log);Eso repite console.log 10 veces. console.log es una función, que se pasa como la función de acción. Luego se ejecuta 10 veces.
Las funciones de orden superior son funciones que toman otras funciones como parámetro(s). Se basa en que las funciones se denominan miembros de primera clase en Javascript, lo que dice, entre otras cosas, esto: las funciones se pueden pasar a otras funciones, como parámetros.
En su ejemplo, la función pasada dentro de la función de repeat se llama action , que está definida por su firma de función de repetición (n,action) (independientemente de cualquier nombre que ya tenga la función real que se está pasando), por lo que cualquier función que se pase into repeat se puede llamar dentro de él usando action() .
Tenga en cuenta que no hay forma de garantizar que la llamada real tendrá una function como segundo parámetro; nadie puede evitar que alguien haga llamadas como repeat('foo', 'bar') o incluso repeat() . Es su trabajo como desarrollador hacer que su función sea a prueba de fallas en este sentido, o tomar el punto de vista de la mierda .
Un ejemplo más simplificado sería este:
function showMessage(message, showMethod) { showMethod(message); } showMessage('Hello world shown by console.log', console.log); showMessage('Hello world shown by alert', alert); showMessage('Hello world shown by console.error', console.error);showMessage es una función que muestra un message , que espera que sea el primer parámetro cuando se llama.message pasado debe pasarse a showMessage como un segundo parámetro.showMessage ejecuta la función que se pasó como segundo parámetro (que se renombró a showMethod dentro de showMessage ), y le pasa message .Otro caso de uso más práctico podría ser este:
function add(x, y) { return x + y; } function subtract(x, y) { return x - y; } function multiply(x, y) { return x * y; } function divide(x, y) { return x / y; } function calculate(x, y, calcFunction) { const result = calcFunction(x, y); return result; } console.log(calculate(2, 5, add)); console.log(calculate(2, 5, subtract)); console.log(calculate(2, 5, multiply)); console.log(calculate(2, 5, divide));