Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

Profundizando en el Engine

5/13
Recursos

Una vez que se ejecuta un archivo en el navegador, el motor de JavaScript genera un entorno global (Global environment). El entorno global hace tres cosas muy importantes:

  • Genera un objeto global llamado window.
  • Genera un contexto llamado this. En un contexto global this es igual a window.
  • Ambiente de ejecuci贸n.

Despu茅s de generar el entorno global, comienza el contexto de ejecuci贸n (Execution context) donde corre el c贸digo de JavaScript utilizando un Stack de tareas, apil谩ndolas una por una, en la cu谩l la 煤ltima tarea a帽adida ser谩 la primera en ejecutarse.

Una vez que el motor de JavaScript est谩 interactuando con el navegador, realiza los siguientes procesos:

  • Parser: genera un parseo del documento completo mediante palabras claves.

  • AST: Se crea a partir de los nodos que genera el parser. Es una estructura de 谩rbol que representa tu c贸digo sint谩cticamente. Puedes utilizar la p谩gina AST Explorer{target="_blank"} para ver c贸mo funciona.

  • Int茅rprete: El int茅rprete recorre el AST y genera Bytecode (lenguaje que entiende la computadora y no es binario) basado en la informaci贸n que contiene. Sin embargo, si el int茅rprete detecta que puede optimizar tu c贸digo, no genera Bytecode, sino que genera un proceso de optimizaci贸n que consiste en el profiler y compiler.

  • Profiler y compiler: El profiler monitorea y mira el c贸digo para optimizarlo. El compiler optimiza ese c贸digo y genera machine code (lenguaje binario). En esta etapa, por la intenci贸n de optimizar el c贸digo, tambi茅n genera errores como el Hoisting.

Engine JavaScript
Contribuci贸n creada por Andr茅s Guano.

Aportes 82

Preguntas 13

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Les comparto un art铆culo que escrib铆 acerca del tema.
.

  • Una vez el motor recibe un archivo JS genera un Global enviroment
  • En el Global enviroment se genera un Global object que es igual a window
  • Tambi茅n se genera una variable this
  • this depende del contexto, en el entorno global this es igual al objeto global
  • Ya despues de generado el entorno global, comienza a correr nuestro c贸digo en el contexto de ejecucion, a trav茅s de un stack de tareas apiladas
  • Una vez que el motor comienza a interactuar con el navegador, genera un parseo del documento completo, para encontrar las keywords y las pasa al AST (abstract syntax tree)

AST Explorer

  • Una vez se tiene el AST, el motor lo pasa al interpreter para retornar bytecode puede ser entendido por la m谩quina
  • Si en la interpretaci贸n del AST ve mucho c贸digo que se repite y que se puede optimizar entra el profiler o monitor, y optimiza el codigo y lo regresa compilado como bytecode para que la m谩quina lo pueda comprender. Es justo en este paso donde aparece el hoisting, donde el motor en su funci贸n de optimizacion reinterpreta el c贸digo de una mejor forma y se pueden presentar errores de programac贸n.
  • El hoisting solo sucede con variables y funciones que se mandan a llamar.

Les comparto este fragmento de un apunte por si alguien quer铆a saber la diferencia entre bytecode y Machine code como yo

Engine es un int茅rprete que compila c贸digo JavaScript a bytecode.
.

Esto, el hoisting, event loop y otros conceptos en este curso son cosas muy preguntadas en las entrevistas para JS developer (Front o Back) entonces aqu铆 si vale mucho crear notas 馃槈 (Y)

El navegador genera un entorno global -> window
hace 3 cosas

  1. Objeto Global -> window
  2. this -> depende del contexto o ambito
  3. otros ambientes

Aqui pas al contexto de ejecucion (execution context)

y Lugo si corre el codigo: Lo corre a travez de un stack de tareas, las aplia una a una

JS -> parser -> AST abstrac sintax tree -> interpreter -> Bytecode (no es lengauje de maquina) pero lo entiende la maquina

Si el interpreter, se da cuenta que hay codigo que puede optimizar,

interpreter -> Profiler (monitor) -> compiler -> otimized code [aqui es donde ocurre el hoisting].
aqui es donde eventualmente se generan errores, ya que la maquina trata de optimizar o mejorar el codigo
y es donde se pueden dar errores desonocidos.
Es necesario tratar de evitar el hoisting
el hoisting ocurre con variables y funciones que se mandan llamar

Dos preguntas de examen:
Cuando hablamos de Windows, nos referimos a un objeto global, tambien se crea una variable llamada This, que hace referencia al objeto global de windows.

Justamente esto del entorno global es uno de los bugs mas comunes en JavaScript ya que aveces llamas una funci贸n o variable en un bloque de c贸digo y te aparece undefined ya que el this de esta funci贸n est谩 apuntando al window o entorno global y tu quieres que apunte al entorno local鈥iene que ver con los scopes de las variables.

馃憖 Profundizando en el Engine

<h4>Recursos</h4>

AST explorer

<h4>Apuntes</h4>
  • Una vez que corre el archivo de JS
  • Lo primero que hace el navegador es generar un entorno global
    • Objeto global principal 鈬 Window
    • This = window
    • Outer Enviroment
  • Contexto de ejecuci贸n
    • Corre tu c贸digo 鈬 Mediante una pila de tareas

Pasos de ejecuci贸n de un c贸digo JS

  1. Parseo 鈬 encontrar claves principales [keyboards]
  2. AST [Abstract syntax tree]
  3. Interpreter
  4. Bytecode 鈬 No es tan bajo como el codigo binario pero si lo puede entender la maquina

Si en el parseo del 谩rbol, el interprete se da cuenta que hay c贸digo duplicado

  • Entra en acci贸n un profiler (Monitor) 鈬 optimizandolo
  • Lo compila
  • Regresa c贸digo optimizado

En este proceso se general el Hoisting

RESUMEN: Al momento de interpretar el c贸digo suceden diferentes cosas por detr谩s, lo mas importante es que se convierte a c贸digo maquina y se optimiza si hay c贸digo duplicado generando algo llamado hoisting

Si quieren saber c贸mo se ve el bytecode pueden crear un archivo (en este ejemplo index.js) y usar el siguiente comando:

node --print-bytecode index.js

Lo le铆 ac谩, por si gustan.

Hace unos meses estuve leyendo esta serie de art铆culos sobre V8 y como optimizar nuestro c贸digo, se los recomiendo:

https://medium.com/reactbrasil/como-o-javascript-funciona-dentro-da-engine-v8-5-dicas-sobre-como-escrever-c贸digo-otimizado-e05af6088fd5

Hoisting: es el comportamiento predeterminado de JavaScript de mover las declaraciones a la parte superior.

1.- Una vez que corre el archivo en el engine, antes de empezar a traducir, GENERA UN ENTORNO GLOBAL, 
2.- Se genera el objeto principal que se llama WINDOW
3.- Despues genera una variable que se llama "this" 
4.- Empieza a correr nuestro c贸digo en el contexto de ejecuci贸n, lo corre a traves de un stack de tareas (las apila una por una)
5.- Ya que esta interactuando el motor con el navegador, genera un PARSEO del documento completo, 
    lo cual le ayuda a encontrar las claves principales (key words)
6.- Se genera el Arbol de sintaxis abstracta (AST) con las key words, el cual va a parsear el navegador despues
7.- Interpreta el arbol (y ahi entra un profiler que ayuda a optimizar el c贸digo) JUSTAMENTE donde entra el HOISTING
8.- Al final genera Bytecode el cual entiende la maquina

Profundizando en el Engine

  1. Se crea un Entorno global que genera 3 cosas:
    1. Un objeto global llamado window .
    2. Una variable llamada this que depende del contexto en el que se llame, en el entorno global 贸 global scope, this es igual a window .
    3. El outer environment que es un entorno llamado por el entorno lexico de javascript.

Contexto de ejecuci贸n

Es la forma c贸mo se corre el c贸digo que es en forma de pila.

El archivo de JS primero se parsea mediante AST (Sintaxis de 脕rbol Abstracta) para identificar las variables y las funciones y entender que parametros cumplen en esa sintaxis. Finalmente se genera Bytecode que es una forma en que entiende el navegador. Tambi茅n el motor puede optimizar algunos pasos en caso que vea que haya c贸digo repetido.

Hoisting es el comportamiento por defecto de JavaScript en el que la declaraci贸n de variables y funciones se mueve autom谩ticamente al principio del scope (ya sea el principio del archivo, la funci贸n o el bloque). Mira este ejemplo:

greetMiguel()

function greetMiguel() {
  console.log("Hello Miguel")
}

A pesar de que estamos invocando la funci贸n **greetMiguel **antes de definirla, esto funciona; la declaraci贸n de la funci贸n se mueve al principio del archivo antes de ejecutarlo.
La declaraci贸n de las variables tambi茅n se mueve, pero no la inicializaci贸n. Mira este ejemplo:

console.log(name);
let name = 'Miguel Soler';

El resultado de este c贸digo es undefined porque, aunque la declaraci贸n de name se mueve al principio, la inicializaci贸n no. El anterior c贸digo es igual a:

let name;
console.log(name);
name = 'Miguel Soler';

Por esta raz贸n, si asignamos una funci贸n a una variable, la funci贸n no se mueve al principio y no la vamos a poder invocar antes:

greetMiguel(); // Error, greetMiguel is not a function

const greetMiguel = function() {
  console.log("Hello Miguel");
}

Lo mismo ocurrir铆a si cambiamos la funci贸n por una funci贸n flecha.
Recuerda y rep铆telo a diario: Lo que se mueve es la declaraci贸n de la variable, no la inicializaci贸n.

Global Environment: Entorno Global
Global Object: Objeto Global
This: Variable que depende del contexto
Outer environment: Entorno Externo
Execution Context: Contexto de Ejecuci贸n para las tareas

El AST es genial porque gracias a el podemos desarrollar nuestras propias reglas para ESLint, en el curso profesional de JavaScript te ense帽an esto, y b谩sicamente el bytecode es muy parecido a c贸digo de los niveles de Assembler jaja

En el curso de JavaScript Profecional con @sparragus se explica un poco mejor y con mas detalles.

En el curso de Fundamentos de javascript vemos algo sobre este tema y el cuidado que hay que tener con this.

Global Enviroment

Global Object - this - Outer Envoroment

El entorno Global

1 - Genera un objeto global que se llama window

2 - genera variable this quien en el entorno global hace referencia a window

3- Outer envoroment - Entorno exterior

Despu茅s se crea el Contexto de ejecuci贸n

Donde se empieza a correr nuestro c贸digo a trav茅s de un stack de tareas en donde se apilan una a una.

index.js

Parser
Analiza el codigo JS enviado para organizarlo, encontrando keywords y dando sentido para empezar al siguiente paso

AST (Abstract syntax tree)

Se cosntruye una sintaxis en forma de arbol que crea un orden idoneao para despues compilar a lenguaje maquina.

Profiler (monitor)

En este proceso se identifica si el codigo puede ser optimizado antes de pasarlo a Byte code relizando optimizacion y facilitando asi la interpretacion.

Interpreter

Aqu铆 se interpreta el 谩rbol y convierte el codigo JS en ByteCode

Bytecode

En la etapa de interpreter, profiler y compiler se crea el hoisting, si no se le da un adecuado manejo nos puede generar algunos inconveniente ya que al tratar de optimizar nuestro c贸digo el motor nos puede provocar algunos errores indeseados.

-Pasear s铆gnifica analizar y descomponer un STRING (conjunto de caracteres) escrito en un LENGUAJE FORMAL

-DESCOMPONER significa DIVIDIR el STRING seg煤n reglas y key-words del lenguaje

-ANALIZAR significa darle un sentido a esas descomposiciones , gracias a las key-words y reglas

-EL objetivo de parsear es producir una estructura de ejecuci贸n (ARBOL-TREE) y que sea capaz de entenderlo una computadora

No entiendo, seg煤n el profesor la maquina entiende y ejecuta Bytecode y ya, pero he estado investigando y dec铆an que pasa a Machine Code y ah铆 se ejecuta.
Aqu铆 no explican a profundidad; el hecho de que el motor funciona con un interprete y compilador y que el c贸digo optimizado es Machine Code y demas.

  1. El navegador apenas recibe un JS lo primero que hace es crear un Global environment , m谩s conocido como Window
    1. Genera un objeto global.
    2. Variable this.
  2. Se genera un contexto de ejecuci贸n
    1. Parser para encontrar Keywords para pasarlas al AST.
    2. Crea el AST (Abstract Sintax Tree).
    3. Interpreter y retorna bytecode, si en la fase de interprete detecta algo que se pueda optimizar se pasa a un profiler para que optimize, compile y optimice a bytecode. En este paso es donde se genera el Hoisting

Hoisting, no hosting

Entendiendo como funciona V8
驴C贸mo lo hicieron?
Entre todas las razones, la principal est谩 en los conceptos compilador e int茅rprete.

El compilador es el programa encargado de convertir c贸digo escrito en un lenguaje de programaci贸n a otro lenguaje de programaci贸n de bajo nivel. Por ejemplo, el compilador del V8 es el encargado de transformar JavaScript a Bytecode y luego a Machine Code.

Por otra parte, el int茅rprete es el encargado de revisar el c贸digo l铆nea por l铆nea y ejecutarlo directamente en la m谩quina de destino. Cabe resaltar que los int茅rpretes tambi茅n realizan alg煤n trabajo de traducci贸n al igual que los compiladores.

Cuando llega un script al navegador el motor V8 inicia un proceso el cual consta de:

  1. Recibir el c贸digo JavaScript como un flujo de bytes UTF-16 y pasarlo a un decodificador de flujo de bytes (el cual hace parte del motor).

  2. Parsear (transformar) el c贸digo y descomponerlo en tokens (los tokens son elementos de js como: let, new, s铆mbolos de operaciones, functions, promises).

  3. Gracias a el anterior parseo se genera una estructura de datos en forma de 谩rbol, o bien, Abstract Syntax Tree (AST). V8 cuenta con dos tipos de parseo que ver谩s m谩s abajo.

  4. El int茅rprete recorre el AST y va generando el bytecode.

  5. Luego de interpretar todo el c贸digo, el profiling data va evaluando el bytecode varias veces m谩s y de esta forma descubre que puede enviarle al optimizing compiler, el cual se encarga de optimizar el c贸digo bytecode a machine code y as铆 se reemplaza el c贸digo base para ejecutar el c贸digo JavaScript m谩s r谩pido y usar menos recursos.

El optimizing compiler encuentra los puntos donde el c贸digo se puede optimizar. Normalmente optimiza el c贸digo que se repite varias veces. En caso de que la operaci贸n cambie por alguna raz贸n, el c贸digo vuelve a la versi贸n anterior (la des-optimizada). Esto se hace para consumir menos recursos y por lo tanto ejecutar el c贸digo m谩s r谩pido.

m谩s info: https://dev.to/johncardenasp/como-funciona-el-motor-de-javascript-jfb

Una vez que el motor corre el archivo de JavaScript, lo primero que hace es generar un entorno global, y procede a realizar 3 pasos.

  1. Dentro de este entorno, crea un objeto global conocido como window (en los navegadores es Window y en Node.js es global)
  2. Genera la variable this, donde en este entorno (scope global) this hace referencia al objeto window.
  3. Despu茅s de haber creado el entorno global y el objeto global, crea un contexto de ejecuci贸n en donde correr谩 el c贸digo a trav茅s de una pila de ejecuci贸n. (Call Stack)
  • Luego, cuando JavaScript empiece a interactuar con el navegador ocurre un parseo (digamos que es una inspeccion) del documento completo para encontrar las keywords y mandarlas al Abstract Syntax Tree (AST), que es una estructura de 谩rbol donde podemos ver como estan estructuradas las keywords (variables, funciones, objetos, todo en si) por dentro. https://astexplorer.net/

  • Ahora que tiene el 谩rbol sint谩ctico listo con las keywords desestructuradas, comienza a interpretar el c贸digo y lo convierte en bytecode (que no es tan bajo como machine code, pero la m谩quina si puede entenderlo).

  • Antes de convertirlo en bytecode, puede ocurrir un paso interior donde si el motor detecta que el c贸digo puede ser optimizado (debido a que hayan variables repetidas, funciones declaradas, y errores en el c贸digo) por el motor en un intento de ayudarnos a que no ocurran errores, y una vez que lo optimiza, lo compila y lo convierte en bytecode. En este proceso puede ocurrer el Hoisting (levantamiento) donde una variable (sucede mas que todo con var y function) es subida y guardada en memoria antes de ejecutar cualquier tipo de c贸digo, y puede devolvernos un comportamiento err贸neo de nuestro c贸digo.

驴Qu茅 es el Hoisting?

Como V8 trata nuestro c贸digo, abrir imagen en nueva pesta帽a para mejor calidad

AST = abstrac sintax tree

El Bytecode es un c贸digo intermedio que se puede tomar como un binario ejecutable. Su utilidad es que corre independientemente de la arquitectura de la computadora y de el sistema operativo.

El Bytecode a煤n necesita un interprete para ser ejecutado, ya que se necesita convertir ese Bytecode al set de instrucciones adecuado para la arquitectura en la que se corre.

En el Curso B谩sico de JavaScript explica que es el Hoisting, podemos repasar la clase Aqui!

hoisting, es cuando usas variables sin haberlas declarado antes
ejemplo

var duplicarEdad = edad * 2
var edad              = 31;

Esto es lo visto en un capitulo del curso profesional de js pero mas desglosado

El tener buenas pr谩cticas no solo ayuda a que el c贸digo sea mas legible, tambi茅n ayuda a convertir nuestro c贸digo a lenguaje maquina

Les comparto el siguiente art铆culo para entender un poco mejor this:
.
This en diferentes situaciones y su comportamiento:
https://filisantillan.com/this-en-diferentes-situaciones-y-su-comportamiento/

Global Environment: Entorno Global
Global Object: Objeto Global
This: Variable que depende del contexto
Outer environment: Entorno Externo
Execution Context: Contexto de Ejecuci贸n para las tareas

Profile nos ayudar optimizar nuestro codigo para cuando se genera el Bytecode
AST -> Arbol de sintaxy

Genial explicado, creemos que es magia lo que ocurre ya que lo hace muy r谩pido pero luego explicado todo cobra sentido aunque sigue con algo de magia 馃槃

Esto lo escuch茅 por primera vez en el curso profesional de Javascript, y esta explicaci贸n me complement贸 aquella informaci贸n. Incre铆ble lo que pasa internamente

Profile nos ayudar optimizar nuestro codigo para cuando se genera el Bytecode

Listo鈥

Hice mi resumen鈥spero se entienda

Investigando un poco, encontre esto relacionado a la diferencia de bytecode y machine code:
el bytecode y el machine code son c贸digos de bajo nivel que se utilizan para ejecutar programas, pero el bytecode es un c贸digo intermedio generado por un compilador que es independiente de la plataforma, mientras que el machine code es el c贸digo de bajo nivel espec铆fico de la plataforma que se ejecuta directamente por el procesador.

Comparto este video creo que clarifica un poco el proceso
https://www.youtube.com/watch?v=JeyR30L_zmk

驴Sabes qu茅 es Parser?

  • Developer Mozilla lo explica de la siguiente manera:

Significa analizar y convertir un programa en un formato interno que un entorno de tiempo de ejecuci贸n pueda ejecutar, por ejemplo, el motor de JavaScript dentro de los navegadores.

esta parte es valiosa, dice tal vez no tenga mucho sentido, pero es importante que puedas entende resto, que mano de carrrera tan barata y poca profundizaci贸n en el tema, por fortuna los profesores como barajas salvan la carrera de javascript

v8

Por si a alguien no le quedo muy claro aqu铆 dejo un link.

no entendi ni papa

Padre, Hijo y Espiritu santo = Global Object, Window y This

que bonita qued贸 esa MAC.

El profiler (monitor) es el encargado de optimizar el c贸digo que mandamos. Aqu铆 es donde ocurre el hoisting, un proceso que al no entenderlo puede causar errores en tu c贸digo.

  • Antes de empezar a correr el motor del navegador genera un entorno global, que es un objeto windows. genera un object global, una variable this y outer enviroment. Luego se genera un entorno de ejecuci贸n (context execution) donde ejecuta un stack de tareas, JS 鈫 Parse 鈫 AST 鈫 Interpreter 鈫 Bytecode (Lenguaje entendible por la m谩quina).
  • Si el interpreter puede optimizar el c贸digo, Interpreter 鈫 Profiler(monitor) 鈫 Compiler 鈫 Optimized code.

Que tal compa帽eros, les dejo mis apuntes de la clase, de esta manera entiendo mejor los temas y se me es mas facil recordar depsues鈥 espero les sirva

Profundizando en el Engine
Global Environment: Una vez se corre el archivo de JavaScript en el Engine, se crea una especie de entorno global. Al crearse el entorno global y hace tres cosas:
鈥 Global Object
鈥 Variable this

Despu茅s de crear mi objeto global y la variable de this (con el cual llamo mi objeto global), se genera algo llamado Execution Context (Contexto de ejecuci贸n): Es el momento en donde se empieza a correr nuestro c贸digo JS. Corriendo el c贸digo en un stack de tareas 1 por 1.
Al empezar a interactuar motor de JavaScript con el navegador es:

  1. Genera un parseo
  2. Despu茅s genera un AST(Abstract syntax tree)
  3. Se lleva para interpretar y llevarlo a Bytecode (lenguaje que puede entender la m谩quina)
  4. Si durante el parseo de este 谩rbol, el int茅rprete se da cuenta que hay mucho c贸digo o que puede optimizar c贸digo. Es donde entra lo siguiente:
    4.1. Profiler (Monitor): El cual nos ayuda a optimizar nuestro c贸digo, y despu茅s lo
    compila y lo regresa como ByteCode.

Buena info neni

y despu茅s escupe c贸digo binario鈥asten agresivo, me gusta zD

Excelente!

AST -> Arbol de sintaxy

Muy bueno

Al decir que Bytecode es el lenguaje interpretado por la maquina鈥

maquina se refiere al V8 Engine o al computador?

Genial

Les dejo este art铆culo muy explicativo: Contexto de ejecuci贸n

Interesante la comprensi贸n de la estructura del motor馃榿馃槉

WHAT DOES THE ENGINE.
The engine once gets the code from the JavaScript file it does choose the main object 鈥済lobal object鈥 that would be the window and its 鈥渢his鈥 references. After this process, it starts to create the 鈥淎ST (Abstract syntax tree)鈥 to be interpreted and translate it into Bytecode that the computer can understand.
Also, before translated the Engine will optimize the code but this help can bring some problems like the 鈥渉osting鈥 between variables and function

Es cuando el motor de V8 al intentar ayudarnos a optimizar el codigo, nos puede generar algunos errores.
En este video Sacha lo explica de una manera muy didactica.
https://www.youtube.com/watch?v=uI6o97A4IrI

En este clase me quedaron mas claro algunos conceptos, que me estaban dando problemas. Genial

JS Engine es un mini programa que interpreta nuestro c贸digo y ejecuta un script de acuerdo a las instrucciones del c贸digo. Posteriormente, este es parseado es decir, va leyendo nuestro c贸digo l铆nea por l铆nea y revisa la sintaxis. Cuando detecta errores, detiene la ejecuci贸n, en caso de que todo vaya bien, entonces produce una estructura de datos llamada Abstract Syntax Tree (AST) despu茅s se traduce a c贸digo m谩quina y esta finalmente lo ejecuta.

Resumen:
Profundizando el Engine.

Cuando el motor de Js comienza a interactuar, empieza por realizar un Parseo(parser), esto le ayuda a encontrar las claves principales.Luego el resultado se pasa al AST(Abstract Sintax Tree). A continuacion se interpreta y se convierte a ByteCode.

Durante el interpretado si el interprete se da cuenta que hay mucho codigo para optimizar, actua el Profile(monitor), el cual ayuda a cumplir esta tarea. Al finalizar la optmizacion el codigo se compila y lo regresa como ByteCode.

Durante esta tarea es donde se puede encontrar el hoisting.

Una vez que corre nuestro archivo en el motor, lo que hace el navegador es crear un objeto principal llamado window que esta en un entorno global. Y este entorno global hace tres cosas, la primera es crear este objeto global llamado window, despu茅s genera una variable llamada 鈥渢his鈥 que hara referencia a nuestro objeto global. Ya que se crea este entorno global, se corre nuestro c贸digo y esto lo hace atreves de un stack de tareas que ira apilando una por una.
Si JS detecta que nuestro c贸digo se puede optimizar, toma el segundo camino, pero esto es por que seguimos malas practicas, y en este proceso de optimizado se genera algo llamado Hoisting. Esto funciona con variables y funciones y nos puede generar problemas.

si se usa "use strict" en el entorno global this no es asignado a window, es undefined.

Gracias muy bueno.

MY NOTES DEEPENING IN THE ENGINE 馃槃
En esta clase veremos que es lo que sucede mas a fondo en el motor de js

Una vez que corre el archivo de js en engine antes de empezar a traducirlo

genera un entorno global Global Environment

Este entono global es un objeto principal al cual se le llama window

El entorno global hace 3 cosas:

  • Genera un objeto global = window
  • Genera una variable llamada this, esta variable this depende del contexto en el que la estes llamando, en este caso this en el entorno global this es igual al objeto global osea igual a window

Despues de que genera estos dos el objeto global y variable this llega algo llamado Execution Context ya que genero este entorno global empieza a correr nuestro codigo

Esta parte de correr de codigo la hace atraves de un stack de tareas donde ira apilando cada una de ellas

Una vez el motor de js esta interactuando con el navegador

  • Genera un parseo del documento completo para encontrar estas claves principales
  • Despues lo pasa al AST que es el arbol de sintaxis abstracta
  • Una vez tiene este arbol lo que hace es interpretar y despues devuelve bytecode que es el lenguaje que entiende la maquina
  • Existe un paso intermedio en donde el navegador se da cuenta que el codigo puede ser optimizado por malas practicas em el codigo y una vez lo optimiza lo regresara como bytecode

PARSING quiere decir analizar y convertir un programa en un formato interno que un ambiente que corre en tiempo real (Runtime) puede procesar, por ejemplo, el motor V8 de javascript en el navegador.

  • Hoisting es la forma en c贸mo Javascript interpreta las declaraciones que ocurren en nuestro c贸digo, para de 茅sta forma darle un contexto en el momento de ejecuci贸n.
  • Esto es que cuando escribimos c贸digo JS, el motor va a agarrar eso escrito y por medio de su contexto de ejecuci贸n va a realizar un Parser, un analisis de lo que est谩 escrito.
  • Si encuentra algo mal, detiene su ejecuci贸n y devuelve el error.
  • Por lo contrario, enviar谩 todo al AST para que, de acuerdo a su estructura, se construye un 谩rbol de sintaxis de lo que lleg贸 del Parser.
  • Esto se interpreta y si es necesario se optimiza, para finalmente enviarlo a que lo lea la m谩quina por medio del Byte Code.