Skip to content

Instantly share code, notes, and snippets.

@ger86
Created February 5, 2020 11:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ger86/20dfec4cf2b36bf8a7c911502de8b24f to your computer and use it in GitHub Desktop.
Save ger86/20dfec4cf2b36bf8a7c911502de8b24f to your computer and use it in GitHub Desktop.
Variable hoisting in Javascript
/******************************************************************************************************
*
* 🆙🆙🆙🆙 Variable hoisting 🆙🆙🆙🆙
*
* Característica del lenguaje que de forma automática la declaración de las variables
* a la parte superior del bloque funcional / global
*
*******************************************************************************************************/
console.log(user); // "undefined" pero no da error
var user = {};
// 👀 Javascript lo ve así: 👀
var user;
console.log(user);
user = {};
/**********
* 😲 También hay "Function hoisting" cuando declaramos una función
**********/
foo();
function foo() {
alert('it works!');
};
/**********
* ⚠️ Pero esto no funciona si asignamos una función a una variable
***********/
foo();
var foo = function() {
alert('it works!');
};
// ❌ Uncaught TypeError: foo is not a function
/**********
* 🚫 Las variables declaradas con let / const sufren hoisting pero son puestas
* en la Temporal Dead Zone, por lo que no pueden usarse hasta que son definidas
**********/
console.log(user);
const user = {};
// ❌ Uncaught ReferenceError: Cannot access 'user' before initialization
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment