Cristian Fernando Villca Gutierrez
Rafael Martínez Rodríguez
Griger Ratia
Aranxa Martinez
Andres Prieto
Diego Hanssel Perez
Alfredo Olmedo
Oscar Fuentes Esteves
Andres Prieto
Xavier Flores
Juan Guillermo Perez Cardozo
Elkin Alfonso Rey Ladino
Andres Prieto
silfredo mario
Tanelo Mondaca Silva
German Cavani
Dario Paladines
Natalia Gallego Heras
Daniel Flores
Rodrigo Cazard
Jossue Emmanuel Fuentes
Andres Cavedal
Ricardo Alfonso Chavez Vilcapoma
John Jaramillo
Jefred Bedoya
andres gonzalez
Francisco Ponce
Renato Riva Ramos
Francisco Ponce
Pablo Diaz
Valentina Llorente Hernández
Andrés Villarraga
Andrés Villarraga
Mis aportes:
var, si intentamos hacer un ejemplo similar con let o const tendremos errores:console.log(x); //❌ ReferenceError: Cannot access 'x' before initialization let x = 5;
function, si intentamos aplicarlo a arrow functions tendremos errores también:console.log(saludo()) //✅ "Hola" function saludo(){ return "Hola" } console.log(despedida()) //❌ ReferenceError: Cannot access 'despedida' before initialization const despedida = () => { return "Bye" }
Muchas gracias por la aclaración
BUen aporte
Es importante recalcar que el Hoisting en las funciones, solo afecta a aquellas que estén escritas con la sintaxis de "Function Declaration", si intentamos con otras sintaxis, arrow o function expression, nos mandará un error.
¿Recuerdas que JS "lee" 2 veces? Sí, los está afectando, solo que estás comparando 2 momentos diferentes
La palabra clave "function" y el nombre de su función se lee en la "primera pasada", la invocación de "myFunction" en la "segunda pasada"
myFunction() function myFunction () { console.log("Voy primero") }
En este segundo ejeplo "const" y su nombre se leen en las "primera pasada", más no lo que vale "myVar", es decir; no coge lo que está después del igual; el engine separa un espacio en memoria con la etiqueta "myVar" y lo deja a la espera de meter la información en ese espacio, pero eso lo hace en la "segunda pasada" y es en esa que invoca a "myVar()" pero en ese momento "myVar" no es una función, solo es un espacio en memoria, es decir; myVar en ese momento en el que es invocada es igual a un espacio en memoria por lo que falla y esto tiene sentido. ¿Qué tal si una función me da el contexto de todos mis usuarios, pero yo antes de tener el espacio para guardar esa información ya la estoy leyendo? Leería vacio... Ese es el origen de ese error
myVar() const myVar = () => { console.log("Voy a fallar") }
el problema es que estas llamando la función antes de inicializara, el erro te lo va a mostrar si o si, la variable tiene que estar por encima del código donde la vayas a usar(al principio de todo incluso si es una variable función o en un bloque es lo que se recomienda) .salu2.
El concepto de Hoisting fue pensado como una manera general de referirse a cómo funcionan los contextos de ejecución en JavaScript (específicamente las fases de creación y ejecución).
Conceptualmente, por ejemplo, una estricta definición de hoisting sugiere que las declaraciones de variables y funciones son físicamente movidas al comienzo del código
Lo que sucede es que las declaraciones de variables y funciones son asignadas en memoria durante la fase de compilación, pero quedan exactamente en dónde las has escrito en el código.
Buenas Prácticas: Las funciones se deben de declarar al inicio del código
A pesar de ésta caracteristica, yo sigo declarando antes de usar. Costumbres de haber empezado con otros lenguajes.
En JS eso puede ser menos óptimo, te sugiero usar snippets; la micro optimización también muestra seniority después de todo
excelnte respuesta de Andres
Ya conocia bien sobre hoisting, pero este profesor lo explico de la mejor manera jamas vista.
La recomendación es no usar var solo let y const eso es lo que se dice en ES6, y así evitar los errores del hoisting que son considerados una mala práctica o por lo menos es lo que se recomienda en mi empresa desde el primer día que entre.
Allá tienen buenas prácticas, var también usar más RAM
TEMPORAL DEAD ZONE.
Las variables declaradas con las palabras claves (let, const), entran a una zona conocida como zona muerta. Es decir, que todo el código que necesite de estas variables no se va a ejecutar hasta que están tengan un valor asignado.
Pennywise es experto en hoisting 🎈
El concepto de hoisting es que las funciones y las variables declaradas se "elevan", pero no lo hacen literalmente en el código, sino en la memoria de Javascript, es decir al momento que corremos nuestro código y este va a empezar a compilar JS "agarra" todas las variables y funciones(OJO: solo las declaraciones, ya que la inicialización de las variables lo hará de acuerdo a la ejecución del código) y las pone hasta el inicio y luego empieza a ejecutar el código,
Súper, esta sí lo entendí todo perfecto 👌🏼 y agradezco mucho el resumen de debajo 🫡
Resumen breve: ¿Qué es el Hoisting?
El hoisting es un comportamiento de JavaScript donde las declaraciones de variables (var) y funciones se "elevan" al inicio del scope (global o de función), antes de que se ejecute el código. Sin embargo, solo las declaraciones, no las asignaciones, son elevadas.
🔹 Variables con var:
console.log(nombre); // undefined var nombre = "Andres";
JavaScript lo interpreta así:
var nombre; console.log(nombre); // undefined nombre = "Andres";
🔹 Funciones declaradas:
console.log(saludar()); // "Hola" function saludar() { return "Hola"; } ```Las funciones se elevan **completamente**, por eso puedes invocarlas antes. 🔹 Funciones asignadas a variables (`var`): ```js console.log(saludar()); // ❌ Error var saludar = function () { return "Hola"; };
Aquí, saludar es undefined al momento de la llamada → TypeError.
🔹 Bloques con let y const:
console.log(x); // ❌ ReferenceError let x = 5;
Aunque hay hoisting, let y const caen en la "zona muerta temporal" (TDZ), donde no se puede acceder a ellas antes de declararlas.
.
🔹 Buenas prácticas:
let y const, evita var.🔁 Conclusión: El hoisting puede causar errores difíciles de detectar. Entenderlo te ayuda a escribir código más predecible y seguro.
Hola compañeros, alguno conoce la terminal que tiene el profesor? me parece muy bonita y practica
La termina que utiliza al seleccionar el código es Code Runner
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner
Okay code runner es lo que arranca el codigo, pero para tener la misma interfaz que tiene el en VsCode alguien la sabe?
Buenas prácticas para usar hoisting
No utilices var en las declaraciones de variables. Escribe primero las funciones y luego su invocación.
Buenas prácticas para usar hoisting No utilices var en las declaraciones de variables. Escribe primero las funciones y luego su invocación.
Conclusión... No utilices el hoisting jajaja. Hablando en serio... Es un concepto bastante interesante.
El Hoisting es el comportamiento de JavaScript donde las declaraciones de variables y funciones se mueven conceptualmente al inicio de su ámbito antes de ejecutarse.
Puntos clave
var vs let/const: Las variables declaradas con var se elevan e inicializan como undefined. Las declaradas con let o const también se elevan, pero permanecen en una "zona muerta temporal" sin inicializar.Por que este codigo si devuelve "elmo"?
nameOfDog("Elmo"); function nameOfDog(name) { console.log(name); };
El código en cuestión devuelve "Elmo" porque se trata de una función que recibe un parámetro name y lo imprime en la consola utilizando console.log(name).
En este caso, se llama a la función nameOfDog con el argumento "Elmo", lo que significa que el valor de name dentro de la función será "Elmo". Luego, la función simplemente imprime ese valor utilizando console.log(name).
Es importante destacar que en JavaScript, las funciones se pueden llamar antes de que se definan en el código, gracias al proceso de "hoisting" que realiza el intérprete de JavaScript al procesar el código. Por lo tanto, aunque la llamada a nameOfDog aparezca antes de la definición de la función, el intérprete de JavaScript puede identificar la función y ejecutarla correctamente cuando se llama.
En resumen, la función nameOfDog recibe el argumento "Elmo" y lo imprime en la consola, por lo que el resultado final será la cadena de texto "Elmo".
Es la segunda vez que veo esto, me pregunto el porqué no lo comparan con Css que funciona por cascada?
Como tal, el "hoisting" en JavaScript no funciona de la misma manera que la manera en que funcionan las sheets de CSS. Pudiera ser que en términos de especificidad de un selector, pero creo que no sería del todo adecuado.
Recuerda que el "hoisting" en JavaScript se refiere a cómo las variables y las funciones declaradas se mueven automáticamente al principio del ámbito en el que están definidas, antes de que se ejecute cualquier código en ese ámbito. Esto significa que puedes usar una variable o función antes de declararla y no recibirás un error, ya que JavaScript ha movido automáticamente la declaración al principio del ámbito.
COMO SE COMENTA EL CODIGO, COMO LO HACE EL PROFE? EN EL MINUTO 4:34
teclado en español es: ctrl + k + c
teclado en ingles es; ctrl + /
Aunque en la teoría esta bien, creo que al pasar por Node esta usando el modo estricto, por eso el undefined, un ejemplo más claro de Hoisting es este:
En tiempo de ejecución, el hoisting permite que el motor cambie el orden del código para que la variable exista a la hora de usarla, pueden probar en la consola del browser.
Usando modo estricto: