Hoisting en JavaScript
¿Qué es el Hoisting?
Hoisting es un concepto pensado como una manera general de referirse a cómo funcionan los contextos de ejecución en JavaScript. Especialmente cuando hablamos de las fases de creación y ejecución.
¿Cómo funciona?
El funcionamiento del Hoisting consiste en que independientemente de donde se encuentre la declaración de una variable o función, ésta es movida al inicio del ámbito al que pertenece.
Es importante mencionar que el JavaScript solo utiliza Hoisting en declaraciones y no en inicializaciones. Por lo que si se intenta usar una variable que es definida e inicializada después de usarla, el valor de ésta será ‘Undefined’.
1 2 3 4 |
var x = 10; // Inicialización de x var y = 20; // Inicialización de y console.log("x: "+x+" y: "+y);// El resultado es: x: 10 y: 20 |
1 2 3 4 5 |
var x = 10; // Inicialización de x console.log("x: "+x+" y: "+y);// El resultado es: x: 10 y: undefined var y = 20; // Inicialización de y |
¿Cuál es la ventaja del Hoisting?
La ventaja del Hoisting es que permite ejecutar cualquier segmento de código incluso antes de que este sea declarado.
Ejemplo:
En el siguiente ejemplo nos encontramos con la declaración de una función que después es ejecutada, lo cuál se pensaría que es la única forma en que esto funcionaría sin errores.
1 2 3 4 5 6 7 8 |
function mostrarEdad(edad) { console.log("La edad de la persona es: " + edad); } mostrarEdad("23"); /* El resultado del código es: "La edad de la persona es: 23" */ |
Mas sin embargo, en JavaScript, gracias al Hoisting el siguiente código en el cual la función es utilizada incluso antes de ser declarada, funciona correctamente al igual que el anterior.
1 2 3 4 5 6 7 8 9 |
mostrarEdad("23"); function mostrarEdad(edad) { console.log("La edad de la persona es: " + edad); } /* El resultado del código es: "La edad de la persona es: 23" */ |
En resumen…
El Hoisting en JavaScript es una característica que hace diferente a éste lenguaje con respecto a los demás. Conocer dicha característica nos permite entender algunos comportamientos del lenguaje. Mismos que podrían considerarse como erráticos si se toman como referencia otros lenguajes de programación.