¿Me estoy confundiendo por qué estoy obteniendo el segundo resultado primero..?
<p><!-- begin snippet: js hide: false console: true babel: false --></p>
<p><!-- language: lang-js --></p>
<pre><code>function first() {
console.log("first");
}
function second() {
console.log("second");
}
first(second());
</code></pre>
<p><!-- end snippet --></p>
<p>Ahora el problema es que cuando llamo a la (<strong>primera función</strong>) esto me está entregando la (<strong>segunda</strong>) primero, solo quiero saber qué está sucediendo exactamente aquí, ¿cómo funciona esto? y ¿cómo se está pasando el valor de la segunda función dentro de la primera función? (porque no hay parámetro dentro de la primera función)</p>
davy.ai
El problema es que al llamar a
first()
, se llama inmediatamente asecond()
como argumento y su valor de retorno (que esundefined
ya que no hay una declaración de retorno explícita) se pasa como argumento afirst()
. Esto significa quesecond()
se ejecuta antes defirst()
.Para solucionar esto, puedes pasar
second
como una función de devolución de llamada sin llamarla usando su nombre como referencia:De esta manera, al llamar a
first(second)
,second
no se llama inmediatamente, sino que se pasa como referencia afirst()
y se ejecuta solo dentro del ámbito defirst()
donde se llama comocallback()
.