Sabemos que el Scope es el conjunto de reglas que determinan cómo el motor/engine puede buscar una variable por el nombre que la identifica y encontrarla en el alcance que la contenga.

En los lenguajes de programación cuando se trata de Scope existen 2 modelos:

  • Scope Léxico (Lexical Scope) tambien conocido como Scope Estatico.
  • Scope Dinámico (Dynamic Scope).

En Javascript al igual que en la mayoría de los lenguajes, utiliza un Scope Léxico.

¿A que nos referimos por Scope Léxico?

Si recuerdas en entradas anteriores cuando te hablaba acerca de como Javascript es un lenguaje Compilado, una de las fases de compilación era el Lexing o Tokenizing, en este proceso se examina una cadena de caracteres de código fuente y asigna significado semántico a los tokens.

Podríamos decir que el escope Léxico es nombrado así debido a esa fase de compilación (Lexing).

El Scope Léxico se basa en donde son escritas las variables y los bloques de scope en tiempo de escritura, y por lo tanto es (en su mayoría)  establecidos en el momento en que el lexer procesa su  código.

Tomando en cuenta el siguiente código:

function holis(a) {

	var b = a * 2;

	function seeya(c) {
		console.log( a, b, c );
	}

	seeya(b * 3);
}

holis( 2 ); // 2 4 12

Existen 3 niveles de scope.

  1. La declaración de la función holis(a) así como el lugar donde es llamada es el scope global holis(2);.
  2. El scope de la función holis(), comprende desde el parametro a que se pasa a la función al igual que todo el contenido entre las llaves de la función.
  3. El scope de la función seeya(), va desde el parametro pasado a la función así como su contenido entre llaves.

Si te diste cuenta usar y reconocer el Scope en JS es algo que ya sabes hacer (estoy asumiendo xD).

Proximanete seguiré escribiendo un poco mas al respecto sobre scope léxico y dinámico, Just for fun!!.