logo para rammsesitic

Scope de variables en Javascript


¿Qué es el SCOPE en las variables?
Se define como la accesibilidad o visibilidad que tiene una variable en el código. En javascript existen tres scopes:
- Global.

- Function.

- Block.

¿Cómo identificar cada una de ellas?

Global Scope.

Por seguridad no se recomienda declarar variables con scope global, esto se debe a que pueden ser facilmente accedidas de la siguiente forma: window.variableGlobal. La forma de ser declaradas son las siguientes;

- Declarando la variable fura de bloques y funciones, hasta el inicio del archivo de la siguiente manera.

GlobalScope.js
let globalScope_let; //Declarada fuera de funciones y bloques
var globalScope_var; //Declarada fuera de funciones y bloques
const GLOBAL_SCOPE_const; //Declarada fuera de funciones y bloques

function example() {
  console.log(globalScope_let); //Puede ser accedida al ser global
  console.log(globalScope_var); //Puede ser accedida al ser global
  console.log(GLOBAL_SCOPE_const); //Puede ser accedida al ser global
}

Function Scope.

Son aquellas variables que son contenidas dentro de funciones, solo pueden ser accedidas por elementos dentro de esa misma función.

FunctionScope.js

function functionScope() {
  let functionScope_let; //Solo accesible desde functionScope
  var functionScope_var; //Solo accesible desde functionScope
  const functionScope_const; //Solo accesible desde functionScope
}

console.log(functionScope_let); //ReferenceError, no es accesible
console.log(functionScope_var); //ReferenceError, no es accesible
console.log(functionScope_const); //ReferenceError, no es accesible

Block Scope.

Variables que se encuentran dentro de bloques o contenidas dentro de llave { ... }. Siempre y cuando no sea una función.

BlockScope.js

if (true) {
  let blockScope_let; //Solo accesible dentro del bloque del if
  var blockScope_var; //Solo accesible dentro del bloque del if
  const BLOCK_SCOPE_CONST; //Solo accesible dentro del bloque de if
}

for (let index = 0; index < bound; index++) {
  let blockScope_let; //Solo accesible dentro del bloque del for
  var blockScope_var; //Solo accesible dentro del bloque del for
  const BLOCK_SCOPE_CONST; //Solo accesible dentro del bloque del for
}