ambas funciones imprimen el valor dentro de la función "exterior" e "interior" dos veces.
usando la declaración y ejecución de funciones simples
function outer1() { var j = 20; function inner1() { var k = 30; console.log(j, k); j++; k++; } inner1(); //calling inner1 return; } outer1(); // calling function 2 times outer1(); output : // same output both time 20 30 20 30-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx//
usando expresión de función
function outer() { var a = 20; var inner = function() { var b = 30; console.log(a, b); a++; b++; } return inner; //returning inner } var func = outer(); func(); // calling function 2 times func(); output : // value of a is incremented by 1 time. 20 30 21 30Estoy confundido, ¿por qué ambos muestran resultados diferentes? ¿Por qué el resultado sigue siendo el mismo para el primero pero diferente para el segundo?
Con el primer ejemplo, ejecutas outer() varias veces. Esto crea una nueva función interna cada vez, cada una con el valor inicial de j .
Si está familiarizado con las clases, esto es como llamar a new Thing().do(); new Thing().do(); vs const thing = new Thing(); thing.do(); thing.do();