Comprende JS: Alcance y cadena de alcance
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.