Scope: Es el que se encarga de a que bloque de codigo va acceder una variables.
Local Scope:permite acceder a una variable solamente en este bloque de codigo.
let persona= ()=>{
//local scope
let nombre='victor';return nombre;}//global scope//la variabe nombre esta definida en la funcion osea que se accede a la funcion persona para imprimir la variable
console.log(persona());//este codigo da error por que la variable no esta definida en global scope
console.log(nombre);
Global Scope:el global scope tiene alcance directo a las variables o funciones ya que no se declaran adentro de bloques de codigo.
//Global scopelet numero=18;
//Se accede directamente ala variable ya que se declara enelglobal scope
console.log(numero);
Ambito Lexico: Cuando yo declaro dos variables del mismo tipo las llamo de forma igual como estas pueden convivir en el codigo sin modificar una a la otra, gracias al ambito lexico esto se refiere a que las dos variables pueden convivir en el mismo codigo si una esta declarada en un ambito diferente de la otra.
//Global scopelet nombre='victor';
functionpersona() {
//local scopelet nombre='carlos';
return nombre;
}
//imprimira la variable que esta declarada en global scopeconsole.log(nombre);
//imprimira la varible declarada en local scope console.log(persona());
//las dos variables conviven juntas pero en dos ambitos diferentes
Closures: Es una funcion interna que tiene alcance a su funcion padre aun despues de ejecutarse un return.
//funcion padre
const moneyBox = () => {
let saveCoins = 0//funcion hija
const countCoins = (coins) => {
//accede a la variable de la funcion padre
saveCoins += coins
console.log(`MoneyBox: $${saveCoins}`)
}
return countCoins
}
let myMoneyBox = moneyBox()
myMoneyBox(4)// 4myMoneyBox(6)// 6myMoneyBox(10)// 10
Ambito Lexico en Closure: el closure se puede ejecutar en dos variables distintas y no se afectan entre si.
const buildCount = i => {
let count = i;
const displayCount = () => {
console.log(count++);
};return displayCount;
};//hay dos scope
const myCount = buildCount(1);
myCount(); // 1
myCount(); // 2
myCount(); // 3
const myOtherCount = buildCount(10);
myOtherCount(); // 10
myOtherCount(); // 11
Hoisting
Se refiere a la elevacion de funciones y variables que hace javascript al momento de compilar el codigo.
lista de elevados
var = se eleva solo la declaracion
function= se eleva completo
importo=se eleva completo
clases=no se elevan
//esta simple declaracion var a=1//puede ser igula a estavar a;
a=1;
//aqui vemos un ejemplo de como javascript imterpreta la primera declaracion
Gracias, Victor por esa explicación sobre closure