Cuando hablamos de funciones en JavaScript, tenemos dos tipos de funciones: Funciones Declarativas (function declaration / function statement) y Expresiones de función (function expression / funciones anónimas).
Funciones Declarativas:
En las funciones declarativas, utilizamos la palabra reservada function al inicio para poder declarar la función:
En la expresión de función, la función podría o no llevar nombre, aunque es más común que se hagan anónimas.
Diferencias:
A las funciones declarativas se les aplica hoisting, y a la expresión de función, no. Ya que el hoisting solo se aplica en las palabras reservadas var y function.
Lo que quiere decir que con las funciones declarativas, podemos mandar llamar la función antes de que ésta sea declarada, y con la expresión de función, no, tendríamos que declararla primero, y después mandarla llamar.
Cuando se refiere a que el hoisting afecta a una y a la otra no:
si intentamos usar primero una función declarativa antes de ser declarada:
si intentamos usar primero una expresión de función antes de ser declarada:
Y esto básicamente se debe a que:
hoisting detecta primero declaraciones de variables y funciones para poder ser utilizadas, pero no su definición (valor).
Y la expresión de función al ser una función declarada dentro de una variable, detecta solamente var nombre; (sin valor) por lo tanto la función NO es detectada en un principio.
Gracias, pro.
Para los que no saben qué es el hoisting:
La definición de hoisting nos dice que las variables y funciones al ser declaradas se mueven físicamente hacia arriba en el código, es decir, el navegador las lee primero.
Internamente, lo que pasa es lo siguiente: JS pone las variables y funciones declaradas en memoria mientras está en la fase de compilación (eso hace que el navegador las lea primero), pero en realidad siempre van a estar en el mismo sitio de tu código, nunca se mueven hacia arriba.
Mil gracias por este aporte; me acabas de aclarar un comportamiento rarísimo que veía con unas funciones de un código que tenía. La verdad no entendía por que si las colocaba en cierto lugar abajo y las necesitaba antes, me salía un error de que no existiera, pero con esto que explicas y el contenido del artículo, todo quedó genial!!
El profesor Sacha Lifzyc, del Curso de Fundamentos de JavaScript tiene un video en Youtube explicando que es el Hoisting. Un recurso imperdible: ¿QUÉ ES EL HOISTING en JAVASCRIPT? | JS en ESPAÑOL
Me gusta el video, me dejo claro todo con el GLOBO :D:D
DIFERENCIA ENTRE FUNCIONES DECLARATIVAS Y DE EXPRESIÓN
Ambas son declaraciones válidas de una función en JavaScript pero con un formato diferente y por ende con un comportamiento diferente, la función declarativa se ve afectada por el hoisting, mientras que la expresiva no.
Pero, qué es el hoisting. El hoisting es utilizado para referirse a cómo funcionan los contextos de ejecución en JavaScript (específicamente las fases de creación y ejecución).
.
.
■Con las funciones declaradas, tenemos la seguridad de que siempre estarán disponibles en tiempo de ejecución. Con las funciones expresadas, tendremos que éstas no son evaluadas hasta que el intérprete no alcance su posición en el código, lo cual puede generar errores en arquitecturas muy anidadas.
tu aporte esta genial, tienes algún link de donde pueda sacar mas información.
Dale click aqui
Te recomiendo esta pagina https://www.w3schools.com/. Aqui encontraras todo lo que necesites para aprender programación.
la verdad es que debo aplicarme mas, me a costado entender JavaScript hasta este momento, pero se que lo lograre, saludos y que la fuerza los acompañe a todos.... programadores jedi, aun soy un padawan :(
Somos dos hermano.
Me esta resultando muy confuso hasta por ahora.
Animo Eduardo, ya he visto el video por 5ta vez y ya lo he entendido. Poco a poco y ya veras que lo entenderás.
Segun MDN:
El hoisting se refiere a que las declaraciones de variables y funciones es movido al principio del código, pero lo que ocurre en realidad es dichas declaraciones son almacenadas en memoria.
Funciones declarativas = son asignadas a la memoria por lo que la podemos llamar antes sin problemas.
Funciones de expresión = NO son asignadas en memoria por lo que no pueden ser llamadas antes.
por lo que si haces esto
var x = 1;
o
var x = function (a+b) { return a+b }
no aplicara el 'hoisting' , ya que se aplica solamente a la declaración es decir a : var x;
muchas gracias realice la prueba y si efectivamente
Funciones declarativas = la podemos llamar antes sin problemas.
Funciones de expresión = no pueden ser llamadas antes.
Una explicación con ejemplos de hoisting aquí
Muy buen aporte
Es decir que el hoisting es simplemente la forma en la que javascript interpreta las funciones.
La verdad entiendo el tema de declararlas y como usarlas, pero quede perdido con el concepto hoisting como tal.
Y ¿Qué diantres es Hoisting? También conocido como "Elevamiento"
Explicación de Leonidas Esteban
Explicación de Sacha Lifszyc
Precisamente eso me preguntaba jaja, buen aporte.
Que gran manera de aterrizar el concepto
Aquí estoy llamando la función antes de que sea declarada;
Mostrara un error de que no es una función, pues no ha surtido efecto el hoisting.
Que buen ejemplo, me quedo mucho mas claro, gracias!!!!!
tan claro como curso de udemy
En este video que encontre explican que es el hoisting video
Que oportuno, justo me lo estaba preguntando.
👌
Para los que aun no conocen el termino de HOISTING o para que sirve, les dejo este video de Sacha Lifszyc profe de Platzi
¿QUÉ ES EL HOISTING en JAVASCRIPT?
saludos :)
Nunca había escuchado de hoisting, Gracias :D
Genial, gracias por compartir el link
También existe las funciones de flecha, que son una forma diferente de escribir funciones de forma tradicional pero que llevan mucho menos código, conocerlas te ayuda a la legibilidad de un código de forma rápida, aquí tengo un pequeño ejemplo obtenido de esta página en donde puedes encontrar más información al respecto.
// Función tradicionalfunction(a){return a +100;}// Desglose de la función flecha// 1. Elimina la palabra "function" y coloca la flecha entre el argumento y el corchete de apertura.(a)=>{return a +100;}// 2. Quita los corchetes del cuerpo y la palabra "return" — el return está implícito.(a)=> a +100;// 3. Suprime los paréntesis de los argumentosa=> a +100;
Como se puede ver es mucho más compacto, y ahorra varias líneas de código
En programación tenemos algo llamado ámbitos, o en inglés scopes. Imagina esto como una caja, cáda ámbito es una caja que puede tener otras cajas dentro. En cada caja puedes trabajar con lo que tengas (declares) dentro de esa caja, pero también podrás sacar la mano de esa caja para tomar cosas que tengas (que estén declaradas) en la caja más externa (aquella que contiene la caja dónde estás, si estuvieses en la caja de más externo nivel entonces no podrás usar nada de afuera porque no habrá nada afuera).
En Javascript no importa dónde definas tus cosas (variables) siempre que estén en la caja o en una caja superior. Eso es lo que hoisting sería. Sin embargo, lo que se recomienda siempre es declarar las variables en lo más alto de la caja. Esto para evitar errores, porque las variables declaradas con let y const tendrán problemas con ser declaradas posteriormente a ser utilizadas. Lo mejor es estándarizar la práctica y siempre declarar las variables al inicio de cada ámbito (caja). Tendremos el mismo problema con las funciones expresivas, por eso usar las funciones declarativas representa una ventaja, más teniendo en cuenta que cuándo organizamos el código podríamos llegar a mover nuestras funciones para agruparlas por algún criterio.
muchas gracias por el aporte 😁😁😁
Estas usando notion?, si es asi, me puedes compartir tu nota?