Comprende JS: Alcance y cadena de alcance

Bruno Pineda
sngular-devs
Published in
2 min readSep 13, 2018

Parte III de la serie Comprende JS

Alcance (Scope).

Hemos visto hasta ahora como es que funciona el contexto de ejecución en el episodio anterior de esta serie, ahora que entendemos principalmente las fases del dicho contexto, pasamos a comprender el famoso y tan discutido “Scope” antes de entrar en el objetivo que es el “Scope chain”, para ello tomemos en cuenta el siguiente código.

Bien, podemos observar que si corremos el código anterior nos da un error foo is not defined el cual nos indica que no encuentra definido la variable foo y al parecer esta declarada dentro de una función, pues bien esto es gracias al “scope”, ya que la variable foo esta declarada en memoria en un alcance distinto que esta dentro de la función baz() por lo tanto, fuera de esa función (alcance) no esta disponible, recordando también que cuando una función es invocada, se crea un nuevo contexto de ejecución independiente del global.

Pero el alcance va mas allá de solo encerrar en un contexto las declaraciones de variables en memoria, veamos entonces lo que es la “Cadena de alcance” o “Scope chain”.

Cadena de alcance (Scope chain).

Para entender el ejemplo anterior, empecemos por comprender que es “Outter environment”.

Outter environment y Scope chain.

Decíamos ya anteriormente que al invocar una función se crea un nuevo contexto de ejecución, donde sus fases se encargan de poner en memoria y leer variables que estén en dicho contexto, sin embargo, cuando la fase de ejecución del contexto no encuentra una variable dentro en su propio scope, busca en su outter environment dicha variable y si la encuentra es la que usa, en este caso como el entorno exterior de la función b() es el contexto global, entonces toma la variable myVar que ahí se encuentra declarada y con valor 1, es decir que el entorno exterior es el contexto donde se declara la función, mas no donde se ejecuta, a esto se le llama “Scope chain”.

Conclusión

Si comprendemos perfectamente el “Scope”, tenemos ya una poderosa herramienta en la cabeza, que es útil cuando trabajamos con problemas del contexto de ejecución.

<< episodio anterior | episodio siguiente >>

--

--