VAR vs LET vs CONST: TODAS LAS DIFERENCIAS | JS en ESPAÑOL

var

//compativilidad ✅

/*scope limitado a la funcion contenedora
su limite esta dentro de la funcion 
y fuera no existen
*/

// reasignacion ✅

// re-declaracion ✅
function saludar (nombre) {
	var saludo = "hola"
	var saludo = "como estas" // saludo = "como estas"
	console.log(saludo + nombre)
}

// declaracion sin valor inicial ✅
var x // = undefined

// se agregan como propiedad del objeto global 
//en el navegador es window ✅
var nombre = 'adrian'
nombre === window.nombre //true

//en el node es global ❌
var nombre = 'adrian'
nombre === global.nombre //false

// hoisting
/*Con var, podemos acceder a la variable antes de que se
le asigne un valor, por lo que regresa undefined
*/

let

//compativilidad ✅ y con babel en opera y explorer

/*scope limitado al bloque
su limite esta dentro del bloque, este puede ser una 
funcion, o ciclo o promesa, algo de codigo con scope
*/

// reasignacion ✅

// re-declaracion ❌ solo en diferentes bloques
function saludar (nombre) {
	let saludo = "hola"
	let saludo = "como estas" //sintax error
	console.log(saludo + nombre)
}

// declaracion sin valor inicial ✅
let x // = undefined

// se agregan como propiedad del objeto global 
//se agregaran como variables globales
//pero no forman parte del objeto global❌
let nombre = 'adrian'
nombre === window.nombre //false

//en el node es global ❌
let nombre = 'adrian'
nombre === global.nombre //false

// hoisting
/*Con let, si sucede el hoisting pero la variable
entra en la temporal dead zone por lo que no la podemos
obtener hasta que se le asigne un valor
*/

const

//compativilidad ✅ y con babel en opera y explorer

/*scope limitado al bloque
su limite esta dentro del bloque, este puede ser una 
funcion, o ciclo o promesa, algo de codigo con scope
*/

// reasignacion ❌

// re-declaracion ❌ solo en diferentes bloques
function saludar (nombre) {
	const saludo = "hola"
	const saludo = "como estas" //sintax error
	console.log(saludo + nombre)
}

// declaracion sin valor inicial ❌
const x // = error sintax

// se agregan como propiedad del objeto global 
//se agregaran como variables globales
//pero no forman parte del objeto global❌
const nombre = 'adrian'
nombre === window.nombre //false

//en el node es global ❌
const nombre = 'adrian'
nombre === global.nombre //false

// hoisting
/*Con const, si sucede el hoisting pero la variable
entra en la temporal dead zone por lo que no la podemos
obtener hasta que se le asigne un valor
*/