Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

Hoisting es un término que no encontrará utilizado en ninguna especificación previa a ECMAScript® 2015 Language Specification. 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). Asimismo, hoisting puede llevar a malos entendidos. Por ejemplo, hoisting puede dar a entender que las declaraciones de variables y funciones son físicamente movidas al comienzo del código, pero esto no es lo que ocurre en realidad. 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 la ha escrito en el código.

Aprenda más

Ejemplo técnico

Una de las ventajas en JavaScript de colocar las declaraciones de funciones antes de ejecutar cualquier otro segmento de código es que permite utilizar una función antes de declararla en el código. Por ejemplo: 

function nombreDelGato(nombre) {
  console.log("El nombre de mi gato es " + nombre);
}

nombreDelGato("Maurizzio");
/*
El resultado del código es: "El nombre de mi gato es Maurizzio"
*/

El código escrito arriba está escrito de la manera que sería esperada para que funcione. Ahora, veamos qué sucede cuando llamamos a la función antes de escribirla:

nombreDelGato("Dumas");

function nombreDelGato(nombre) { 
  console.log("El nombre de mi gato es " + nombre);
}
/*
El resultado del código es: "El nombre de mi gato es Dumas"
*/

Incluso si primero llamamos a la función en el código, antes de que sea escrita, el código aún funciona. Esto sucede por la manera en la que el contexto de ejecución trabaja en JavaScript. 

Hoisting se lleva bien con otros tipos de dato y variables también. Las variables pueden ser inicializadas y usadas antes de declararse. Pero no pueden ser utilizadas sin inicialización.

Ejemplo técnico

num = 6;
num + 7;
var num; 
/* no arroja errores ya que num está declarada */

JavaScript sólo utiliza el hoisting en declaraciones, no inicializaciones. Si está utilizando una variable que es declarada e inicializada luego de usarla, el valor será undefined. El siguiente ejemplo demuestra ese comportamiento:

var x = 1; // Inicializa x
console.log(x + " " + y); // '1 undefined'
var y = 2;


// El siguiente código se comportará como el escrito arriba: 
var x = 1; // Inicializa x
var y; // Declare y
console.log(x + " " + y); // '1 undefined'
y = 2; // Initialize y

Referencia técnica

Etiquetas y colaboradores del documento

Etiquetas: 
 Colaboradores en esta página: sminutoli
 Última actualización por: sminutoli,