Michel Ventura
FullStack JavaScript Developer
En el contexto de Javascript en el navegador web, el motor del Javascript (v8, SpiderMonkey) realiza lo siguiente:
El motor de Javascript ejecuta todo esto en un único subproceso (single-thread)
Lo primero que hace el motor de Javascript para manejar la complejidad de interpretar y ejecutar el código es crear un contexto de ejecución global.
El contexto de ejecución cuenta con 2 fases, creación y ejecución. En la fase de creación en el contexto global de un navegador web se crean 2 objetos: window y this que es una referencia al objeto global.
Adicionalmente, todas las declaraciones de funciones y variables se almacenan en memoria y a estas últimas se les asigna un valor de undefined (hoisting).
En esta fase, el motor de Javascript ejecuta el código línea por línea, asigna los valores a las variables e invoca las funciones (callbacks).
Cada vez que se invoca una función, se crea un contexto de ejecución de la función y se agregan a la pila de ejecución (callstack). Al momento de terminar la ejecución de la función se quita de la pila de ejecución (LIFO).
Global:
Función:
Crear un objeto arguments
arguments: {0: "argValue",
length: 1 }
Al definir una función, esta puede aceptar parametros que, al momento de ejecución (pasarle argumentos a la función) estos funcionan como variables locales (memoria local) únicamente disponible en el contexto de ejecución actual de la función.
this: window
someLocalVar: undefined
arg: "argValue"
Scope en JavaScript se refiere al alcance de una variable dentro de un contexto de ejecución.
Una variable cuyo scope es global es accesible a cualquier parte del código ya que se añade al objeto global y scopes anidados pueden acceder a él debido al scope lookup (scope chain).
Una variable cuyo scope es local sólo es visible al bloque donde se declaró.
Closure es cuando una función (declarada dentro de otra función) guarda referencias del contexto léxico (lexical environment) que le permite acceder a funciones exteriores.
Cuando se invoca una función, se crea un contexto de ejecución con memoria local. Al terminar de ejecutar esta función, su memoria local se borra excepto lo que se regreso de la función.
Esto permite crear persistencia de datos (cache) en nuestro programa y separar nuestro código en mini programas (funciones).
Higher order functions son funciones que reciben una función como argumento o regresan una función como output.
El hecho de tomar una función como argumento se conoce como función callback, porque se invoca por una higher order function.
Esto es útil para crear funciones más simples y pequeñas con específica funcionalidad y lógica que posteriormente podemos combinar con funciones más complejas para reducir la complejidad del código, reducir bugs y escribir mejor código.
By Michel Ventura
Conceptos esenciales de Javascript