Pensé antes que la expresión de función puede ser cualquier función que esté almacenada en alguna variable. Por ejemplo, esta es una expresión de función, porque la función se almacena en la variable func .
let func = function() { console.log(5); }; Y aquí está la expresión de la función, porque la función de devolución de llamada se almacena en la callback de llamada del parámetro de función.
function func(callback) { callback(); }; func(function() { console.log(5); }); //That's what I mean: //let callback = function() {...}Pero... recientemente descubrí que esta función de devolución de llamada también se puede considerar como expresión de función. ¿Por qué? Esta función no se almacena en alguna variable.
let arr = [18, 50]; let obj = { name: 'Karina', }; arr.forEach(function func(value) { console.log(`${this.name} is ${value} years old`); }, obj);Entonces, mi pregunta es... ¿Qué es exactamente lo que hace que una función sea una expresión?
Pensé antes que la expresión de función puede ser cualquier función que esté almacenada en alguna variable.
No. La variable a almacenar no importa. La let func = …; no es parte de la expresión de la función, la expresión de la función es solo la parte (expresión) que viene en el medio.
let func = function() { // ^^^^^^^^^^^^ console.log(5); //^^^^^^^^^^^^^^^^^^ }; //^Esta función no se almacena en alguna variable.
En realidad, no hay diferencia entre el segundo y el tercer fragmento. Está pasando la función construida a partir de la expresión a una función, independientemente de cómo se declare esa función (con parámetros, con sintaxis de reposo, sin parámetros o como una función integrada como forEach ).
Pero sí, puedes tener expresiones de función completamente sin variables, como en
!function() {…}(); // ^^^^^^^^^^^^^^ void function() {…}; // ^^^^^^^^^^^^^^ (function() {…})(); // ^^^^^^^^^^^^^^Básicamente, las expresiones de función son solo la sintaxis literal (como en: literal de objeto, literal de cadena) para objetos de función.
También estoy aprendiendo sobre programación funcional y descubrí que usar una función como valor es de hecho una expresión de función, como dijiste, al asignar una función anónima a una variable. Pero creo que la principal diferencia radica en que la declaración de la función se eleva, ¿verdad? Así que el contexto entra en juego y todas esas cosas divertidas :)