w3schools valor utiliza una tipos terminar retornar pasar parametros para las instrucciones funciones funcion desde codigos anonimas anidadas javascript syntax functional-programming first-class-functions

utiliza - retornar valor de una funcion javascript



Si las funciones en JS son de primera clase, ¿qué les permite ser llamadas antes de que se definan? (4)

La declaración de función y la declaración de variable siempre se moverán a la parte superior de su alcance.

console.log(foo()); function foo() { return ''bar''; }

se interpreta como:

function foo() { return ''bar''; } console.log(foo());

console.log(foo()); var foo = function () { return ''bar''; };

se interpreta como:

var foo; console.log(foo()); foo = function () { return ''bar''; };

¿Las funciones de primera clase no significan que se comporten como variables? Claramente, no se comportan exactamente como variables, ya que esto:

console.log(foo); var foo = ''bar'';

... no funciona, mientras que esto:

console.log(foo()); function foo() { return(''bar''); }

...hace.

Dicho esto, esto:

console.log(foo()); var foo = function() { return ''bar''; };

no funciona, que es más consistente.

¿Lo que da?


Las declaraciones de funciones se transfieren automáticamente a la parte superior del alcance en JS

console.log(foo()); function foo() { return(''bar''); }

en realidad se interpreta como

function foo() { return(''bar''); } console.log(foo());

el segundo bit de código funciona de esa manera, porque foo es variable, no una función (simplemente tiene una función anónima como valor). Las variables también se golpean hacia arriba, por lo

console.log(foo()); var foo = function() { return ''bar''; };

se convierte

var foo; //empty variable console.log(foo()); //undefined foo = function() { return ''bar''; }; //creates a function without name and assigns it to foo


Lo que estás experimentando se llama izar. Cuando se usa una declaración de función como:

function foo() {}

foo moverá a la parte superior del alcance más cercano (función).

Por otro lado, cuando usa una expresión de función o asignación de función como:

var foo = function() {}

la variable foo moverá a la parte superior, pero la asignación se producirá cuando sea necesario.

Aprende más


Porque no comparas lo mismo. En su ejemplo, compara la función de declaración de function foo()... con declaración de variables y asignación en var foo = ''bar'';

Una comparación más correcta sería de:

console.log(foo); var foo = ''bar'';

con

console.log(foo()); var foo = function() { return ''bar''; }

La declaración funcional se interpreta de manera diferente debido a la forma en que funciona el izado . Alzando mueve todas las declaraciones a la parte superior del alcance más cercano, mientras deja las asignaciones en su lugar.

La declaración de función es especial en ese sentido, ya que se trata tanto de declaración como de expresión / asignación en una declaración y, por lo tanto, se izan juntas.

Como ejemplo: puedes ver expresiones como:

console.log(foo); var foo = ''bar'';

como esto:

var foo; console.log(foo); //prints undefined foo = ''bar'';

y

console.log(foo()); var foo = function() { return ''bar''; }

como esto:

var foo; console.log(foo()); foo = function() { return ''bar''; }