Qué es el hoisting
El hoisting es una característica de JavaScript que permite que las declaraciones de variables y funciones sean elevadas al comienzo del bloque de código en el que se encuentran.
Esto significa que, aunque una variable o función pueda estar declarada en un lugar posterior en el código, será tratada como si estuviera al principio del bloque.
Por ejemplo, si tenemos el siguiente código:
console.log(miVariable); //undefined
var miVariable = "Hola mundo";
La variable "miVariable" no tiene un valor asignado hasta la línea 2, pero gracias al hoisting, se trata como si estuviera declarada al principio del bloque y se imprime "undefined".
Un caso de uso común del hoisting es cuando se declara una función dentro de otra función. La función interna puede ser llamada antes de su declaración, ya que será elevada al comienzo del bloque de la función externa.
Por ejemplo:
function miFuncion() {
miFuncionInterna(); //Llama a la función interna
function miFuncionInterna() { console.log("Hola mundo"); }
}
miFuncion(); //Imprime "Hola mundo"
¿Es el hoisting un fallo de diseño de Javascript?
No, el hoisting en JavaScript no es un error de diseño. En realidad, es una característica del lenguaje que se implementó intencionalmente y aunque puede ser difícil entender al principio, el hoisting se implementó para permitir una mayor flexibilidad en la escritura de código.
De hecho, el concepto de hoisting no es exclusivo de Javascript.
Por ejemplo, en C#, la declaración de una variable se mueve automáticamente al comienzo del bloque en el que se encuentra, y se le conoce comúnmente como "ascenso de variable" o "ascenso de declaración" en C#.
En Java, el concepto de hoisting también existe, aunque se le llama "declaración temprana".
En resumen, aunque el término "hoisting" se utiliza principalmente en JavaScript, el concepto en sí es común en muchos otros lenguajes de programación.