Alcance "Scope"

Podemos decir que alcance dentro de JavaScript se refiere al conjunto de reglas que nos indica donde y como el interpretador de JavaScript puede encontrar variables en su ejecucion. Este define en que area del codigo las variables estan disponible para utilizarlas. Las variables normalmente pertenecen a su propio contexto de ejecución "context of execution", este contexto indica cuando la variable, valor o expresion puede ser visible o usada por medio de referencia. Variables fuera del contexto, no podemos acceder a ellas.

contexto de ejecución "context of execution"

Cuando el codigo es ejecutado, este es ejecutado bajo un contexto de ejecucion. Cuando hablamos de contexto se refiere a la definicion de contexto, todo aquello que rodea, ya sea simbólicamente, a un acontecimiento en este caso la ejecucion del codigo. A partir del contexto, por lo tanto, se puede interpretar o entender un hecho.

Tipos de alcance:

  • Global - las variables definidas bajo este alcance, viven dentro de la ejecucion completa de la aplicacion, esta pueden ser accedida y alterada bajo cualquier otro alcance de ejecucion.
var carname="Mercedes Benz";

function car() {
  console.log(carname); //-> Mercedes Benz
  // carname is accessible from within here
}

console.log(carname); //-> Mercedes Benz
// carname is  accessible here
  • Local - bajo el principio de diseño de programas, Minimo privilegio "Principle of Least Privilege". Cada modulo como proceso debe ser capaz de acceder solo a la informacion y recurso que son necesario para su legitimo proposito. Las variables definidas dentro de un bloque o funcion, estara dentro de su alcance local. Estas variables solo estan disponible dentro de su funcion o bloque en el cual son definidas. Ellas viven dentro su alcance cada vez que se llama a la funcion la cual pertenecen y solo durante su tiempo de ejecucion.
// carname is not accessible here
function car() {
  var carname = 'Mercedes Benz';
  //carname is accessible from within here
  console.log(carname); //-> Mercedes Benz
}

// carname is not accessible here
console.log(carname); //-> ReferenceError: carname is not defined
  • Funcion - bajo el alcance lexico, las variable estan restringida dentro de la misma funcion y desde afuera de la funcion no se le puede hacer referencia o no estaran disponible. Es importante entender que JavaScript no crea nueva area de alcance cuando utiliza llaves {...}, un nuevo alcance solo se crea mediante una nueva funcion.
// Function scope
var carname = 'Mercedes Benz';

function car(carname) {
  console.log(carname);
}

// carname is not accessible here
car('BMW'); //-> BMW

console.log(carname); //-> Mercedes Benz
car('Rolls Royce'); //-> Rolls Royce

console.log(carname); //-> Mercedes Benz
car('Volvo'); //-> Volvo
  • Bloque - este alcanze al contrario del funciones, es ejecutado de manera inmediata y alcanza contexto mayor que ellos, como por ejemplo globales. A esta se le incluye bloques de condiciones y bucles.
// Blocks in Javascript don't create scope
var carname="Mercedes Benz";

if(true) {
  var carname = "Volvo";
  console.log(carname); //-> Volvo
}

console.log(carname); //-> Volvo

results matching ""

    No results matching ""