Scope Léxico (Lexical Scope)
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.
- La declaración de la función
holis(a)
así como el lugar donde es llamada es el scope globalholis(2);
. - El scope de la función
holis()
, comprende desde el parámetro a que se pasa a la función al igual que todo el contenido entre las llaves de la función. - El scope de la función
seeya()
, va desde el parámetro 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).
Próximamente seguiré escribiendo un poco mas al respecto sobre scope léxico y dinámico, Just for fun!!.