SECTION 2
PART 6:
Syntax parser: verifica si el código está bien escritoy se encarga de leer o "traducir" el codigo (es el
compilador).
Lexical environment: Sitio donde escribes tu código para darle sentido o importancia (se refiera a donde
posicionas cada linea de codigo ... tiene que ver con si esta o no dentro de una funcion o algo,
basicamente si esta anidado o no).
Execution context: el "pedazo" de tu codigo que esta corriendo en ese momento.
PART 7:
Name / Value: un nombre puede definirse y usarse varias veces pero depende del execution context
para obtener el valor del environment deseado.
Object: colección de name / value, son listas donde el nombre puede tener un valor o varios valores que
a su vez pueden ser otros nombres y valores.
PART 9:
Al correr o ejecutar tu código el execution context genera 2 cosas automaticamente
· Objeto Global llamado WINDOW
· Variable especial llamada THIS
Nota: El objeto global y la variable especial son iguales, contienen en ellos la información de la current
page (location etc).
Nota 2: Cuando existe una variable o una funcion que no esten dentro de otra funcion, se puede acceder
a estos a traves del window.NameVarOrFunction o this.NameVarOrFunction.
PART 10:
Add: el execution context se crea en dos fases
· Creation phase: se genera el objeto global, la variable especial this, se genera también un outer
environment; Luego de generar estos y traducir la información del código, identifica donde se
crearon variables y funciones y las guarda en la memory space, esta parte del proceso se llama
HOISTING, sin embargo, la información es limitada ya que no guarda la información de las
variables, solo las declara por lo que al buscar su valor este sería undefined mientras que por el
lado de las funciones y las pre carga con su información. esto sirve para preestablecer datos y
estar listos para el execution context.
· Execution phase.
PART 11:
Javascript And Undefined: cuando en js se genera una variable pero no se declara su valor, este será
según la configuración de js undefined obligatoriamente, en caso de llamar una variable que no ha sido
nisiquiera declarada, el mensaje que aparece en la consola es Uncaught ReferenceError: var is not
defined, este error es distinto al valor undefined (aunque en el sentido literal los dos mensajes dicen que
la variable no ha sido definida) ya que, el valor undefined significa que la variable existe y se configurón
con ese valor en la memoria al pasar por la creation phase, por el lado del uncaught error significa que
cuando se paso por la creation phase y se busco luego la informacion de la variable no se encontro
ninguna configuración de esa variable en la memoria.
PART 12:
Execution phase: se interpreta, compila y ejecuta el código línea por línea.
PART 13:
Single threaded: se ejecuta un comando a la vez.
synchronous execution: javascript ejecuta el código una linea a la vez en el orden en que aparece o van
según las líneas ya que posee solo un hilo.
PART 14:
Invocation: ejecutar o llamar una funcion. cada vez que se invoca o se llama a una funcion en javascript,
se genera un nuevo execution context, estos execution context se apilan entre ellos y se ejecuta el que
este arriba, cuando se termina de ejecutar la función, pasa a la siguiente linea de manera sincrona.
PART 15:
Variable environment: donde esta la variable y como se relacionan entre si, es decir, se pueden declarar
varias variables con el mismo nombre y el valor distinto ya que estan en distintos execution context
(global o dentro de cada funcion).
PART 16:
Scope chain: Es el buscar en las referencias del outer environment el valor de una variable, por ejemplo,
si se declara una variable global y se le llama a esa variable (sin definirla) dentro de una funcion, aunque
no esten en el mismo execution context, obtiene el valor global porque el outer environment en este
caso hace referencia al execution context global. otro ejemplo seria, si declaro una funcion B que llama
una variable dentro de otra funcion A que no tiene declarada esa variable, aunque busque el valor en la
función A en la que se encuentra anidada ya que es su outer environment, si no lo encuentra,buscará el
valor en el proximo outer environment que seria en esta caso, el global environment.
Outer environment: conecta los execution context que esten en el mismo nivel, es decir, mismo lexical
environment, por ejemplo, si es una funcion en el codigo de js su outer environment será el global
context, si es una funcion dentro de otra funcion entonces su outer environment sera la funcion en la
que se encuentra anidada.
PART 17:
Scope: donde esta disponible la variable.
EcmaScript 6: es la nueva versión de javascript
Let: se puede usar en vez de var y solo esta disponible en el execution context mientras este se ejecuta,
cuando se termina de ejecutar ya no esta disponible por lo que si se usa let en un loop entonces se
declararia la cantidad de veces que sean los ciclos del loop, el let es otra manera de declarar variables y
no reemplaza el var.
PART 18:
Asynchronous: Mas de uno a la vez, por lo que se pueden ejecutar varios codigos a la vez, aunque
javascript es sincrono existen eventos que pueden ser asincronos.
Javascript engine (motor): lo que suceda dentro del motor de js es sincrono, fuera del motor es
asincrono, por ejemplo el navegador, por lo que al hablar de asincrono en js no es realmente una funcion
asincrona sino que el navegador coloca eventos en una Event Queue (Cola de eventos) y javascript revisa
esa cola siempre y cuando haya finalizado todas sus execution context, en caso de haberlas finalizado,
empieza a crear y ejecutar segun la linea, execution context de la event queue.
PART 19:
Dynamic typing: a diferencia de otros lenguajes de programacion, en javascript al declarar una variable
no hay que colocar que tipo de valor recibirá o será.
PART 20:
Primitive Type: tipo de data que representa un solo valor, existen 6 tipos de primitive type.
· Undefined: representa una falta de existencia, el motor de js asigna undefined a las variables
inicialmente.
· Null: falta de existencia, se puede utilizar cuando quieres setearlos igual a nada a diferencia de
undefined que es utilizado por el motor para asi no confundir si el valor fue por el motor o
porque si llego a donde lo seteas de esa manera.
· Boolean: true or false.
· Number: a diferencia de otros lenguajes en los que hay variables de tipo entero, decimal,
natural etc en javascript solo hay un tipo numerico FLOATING POINT NUMBER, significa que
siempre hay algunos decimales adjuntos aunque se puede fakear como entero.
· String: secuencia de caracteres, se utilizan las comillas simples o dobles ' ".
· Symbol: es nuevo se usa en ES6
PART 21:
Operators: Una funcion especial que sintaxicamente se escribe distinto generalmente toma 2
parametros y retorna 1 resultado, por ejemplo las sumas, restas, mayor que menor que, estos son
notaciones infijas (el operador va en el medio de lo que debe calcular y son vistas por javascript como
que deben sumarse entre ellos como si fuese una funcion de suma)
PART 22:
Operator Precedence: Qué operador de función es llamada primero, la que tenga mas precedencia gana.
Asociativity: Qué ordende operador de funcion será llamado primero, de izquierda a derecha
(asociatividad izquierda) o de derecha a izquierda (este es llamado asociatividad correcta, cuando el
operador y las funciones tienen la misma precedencia).
Si tienes varias funciones la precedencia dice que los que esten mas arriba van primero pero si tienes
algunas funciones con la misma precedencia.
PART 24:
Coercion: convierte un valor de un tipo a otro dinamicamente. por ejemplo, si a una variable le seteo un
valor tipo 1 + '2' el motor de js dinamicamente coercionara el valor 1 en tipo string para devolver 12.
PART 25:
Usar === o !== para que sea estrictamente la comparasion de valor y tipo y evitar la coercion.
PART 27:
Boolean coercion: Si se valida un booleano con una cadena vacia o 0 o null o undefined etc retornará
false y si se compara false || true como hay un true siempre retornará true.
PART 28:
Default Values: en caso de verificar con || 2 datos que sean del mismo tipo devolverá el primero porque
ese es su orden de procedencia y de asociatividad, sin embargo si se pasan dos datos que sean de tipos
distintos devolverá el valor que sea true segun la coercion a boolean, por lo que en una variable puedo
setear un valor tipo parametro (que ingrese el cliente) || uno por default en caso que el cliente ingrese
null undefined o "".
NOTA tener cuidado porque 0 al coercionarlo al tipo boolean retorna false.
PART 29:
Framework Aside: un marco (framework) o una libreria (library) son lo mismo en grandes rasgos, una
agrupacion de codigo de js que realiza una tarea y se puede reutilizar.
window.variable verifica si una variable existe en el global context (otros archivos js o otras librerias).
PART 30:
Objects: Puede tener propiedades o metodos (funcion conectada a un obj).
Objects and the dot: Aunque se pueden acceder a las propiedades de un objeto usando los corchetes
(Object["NombreDeLaPropiedad"]) es mas facil de depurar y se ve mas entendible usando el punto
(Object.NombreDeLaPropiedad).
PART 31:
Object Literals: Aunque se puede crear un objeto así var A = new Object(); En js se puede hacer de
mas de una manera, es mas sencillo colocar {} y js asume que estas creando un objeto, puedes crear sus
propiedades dentro de esas llaves y usar una sintaxis literal del obj a diferencia de otros lenguajes.
PART 32:
Namespaces: un contenedor para variables y funciones con el mismo nombre por separado.
Framework Aside - Faking Namespaces: a diferencia de otros lenguajes de programacion en js no
existen los namespaces asi que para que no se sobreescriban dos variables que se llamen igual (por
ejemplo que esten en 2 js distintos) se agregan estos datos a un objetos y asi se crea un fake namespace.
Se utiliza en muchos frameworks o library's para asegurarse que cuando se escribe una funcion o una var
no colisionen en los espacios de la memoria de js entre ellos.
PART 33:
JSON: Javascript object notation, esta inspirado en los objetos literales de js pero no son lo mismo (en la
sintaxis, por ejemplo las propiedades van con comillas), se creo para reemplazar al xml en la descarga de
data de las paginas y asi consumir menos recursos (ya que el xml usa dos tag (la propiedad) para
envolver el valor).
JSON and object literals: Json no es parte de js pero como su sintaxis es tan similar e hizo la descarga de
datos mucho más sencilla, se crearon metodos para convertir de obj a json y viceversa por lo que aunque
no son lo mismo son usualmente muy usados, json es mas estricto en la sintaxis.
PART 34:
Functions are objects:
PART 35:
PART 36:
PART 37:
PART 38:
PART 39:
PART 40:
PART 41:
PART 42:
PART 43:
PART 44:
PART 45:
PART 46:
PART 47:
PART 48:
PART 49:
PART 50:
PART 51:
PART 52:
PART 53:
PART 54:
PART 55:
PART 56:
PART 57:
PART 58:
PART 59:
PART 60:
PART 61:
PART 62:
PART 63:
PART 64:
PART 65:
PART 66:
PART 67:
PART 68:
PART 69:
PART 70: