El scope es el alcance (accesibilidad) que va a tener la variable dentro del código.
Scope global
Es aquel que permite a las variables, ser accesibles en todo el código de javascript. Con accesible, me refiero a obtener el valor de su contenido o a modificarlo, las variables globales se declaran con la palabra reservada var``let``const
siempre que no esten dentro de ninguna función
var titulo = "Hello world"
let otroTitulo = "Nuevo Hello world"
variableGlobal = "Esta es una variable global"
🚫 Se puede declar una variable sin palabra reservada:
variableGlobal = "Esta es una variable global"
pero es una mala práctica
Scope local
Es el alcance o el acceso que tienen las variable definidas dentro de un bloque de código: una función, un bloque condicional o un ciclo.
Las variable de bloque, son declaradas con let``const
const helloWorld = () => {
const hello = "hello world"
console.log(hello)
}
// Aqui no es accesible hello
Toda variable declarada dentro de una función tiene scope local o scope léxico, es decir, existen solo dentro de ese bloque (salvo que se declare sin palabra reservada)
var variable = "Soy una variable global"// Esta variable es de alcance local
const unaFuncion = () => {
var variable = "Ahora soy una variable local"// Esta variable es de alcance local
const scopeFuncion = () => {
return variable
}
console.log(scopeFuncion())
}
unaFuncion()
console.log(variable)
> Ahora soy una variable local
> Soy una variable global
En este caso, si solo la declaramos dentro de la función, no podemos accederla fuera de la misma. Esto es debido al scope function
const unaFuncion = () => {
var variable = "Ahora soy una variable local"
const scopeFuncion = () => {
return variable
}
console.log(scopeFuncion())
}
unaFuncion()
console.log(variable)
> Ahora soy una variable local
> console.log(variable)
^
ReferenceError: variable is not defined
Ahora, veamos qué pasa si la declaramos dentro de a función sin palabra reservada, ya no tenemos el error, pero es una mala práctica
const unaFuncion = () => {
variable = "Ahora soy una variable local"
const scopeFuncion = () => {
return variable
}
console.log(scopeFuncion())
}
unaFuncion()
console.log(variable)
> Ahora soy una variable local
> Ahora soy una variable local