Según tengo entendido, y me pueden corregir si me equivoco, cuando asigna una variable a una función, es decir, crea una expresión de función, la función no se asigna a la variable de la misma manera que un valor primitivo. La variable no contiene esa función como un contenedor de la misma manera que contiene un valor primitivo, sino que la variable simplemente hace una referencia a esa función.
Entonces, si esto es correcto, quiero saber cómo funciona realmente la invocación de una referencia. Cuando haces esto:
let func = function() {..} func() dado que func no es una función, sino que solo hace referencia a una función, entonces, ¿cómo se invoca? ¿Simplemente está llamando a esa referencia, func , para invocar la función?
Si solo se puede hacer referencia a los objetos, incluidas las funciones, ¿dónde se almacenan?
A menos que responda esas preguntas específicas, no se moleste en darme ninguna fuente de lectura externa. Ya he leído mucho, pero ninguno de ellos responde explícitamente a estas preguntas. Todos son vagos y no proporcionan una respuesta clara explícita.
La variable no contiene esa función como un contenedor de la misma manera que contiene un valor primitivo, sino que la variable simplemente hace una referencia a esa función.
No estoy seguro acerca de su terminología de "hace una referencia" aquí. Una variable siempre tiene un valor. Ese valor puede ser un valor primitivo o un valor de referencia (es decir, una referencia de objeto).
Si solo se puede hacer referencia a los objetos, incluidas las funciones, ¿dónde se almacenan?
Simplemente en otro lugar de la memoria. Se crea mediante la expresión literal del objeto o la expresión de la función, y se puede hacer referencia a ella una o varias veces. Los objetos se recolectan automáticamente en JavaScript.
¿Cómo funciona realmente la invocación de una referencia? ¿Simplemente está llamando a esa referencia,
func, para invocar la función?
Sí, simplemente está llamando a esa referencia, que ejecutará el código que forma parte del objeto de función.