This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Dish hace referencia al contexto donde se ejecuta.
Muy bien.
Esa serÃa la más tÃpica, ¿no?
Que Dish tiene justamente el contexto de donde se ejecuta, ¿vale?
O sea, esa serÃa la más tÃpica.
Luego, lo que se puede decir más bien del Dish serÃa que siempre se refiere al dueño de la función, ¿vale?
Dish que puede ser el contexto en el que se ejecuta, pero creo que es mejor si habláis del dueño, de la función, porque entonces creo que se entiende mejor.
Y os voy a explicar por qué.
Cuando llega el Dish, los espectadores han ido corriendo, luego van a la entrevista y dicen, es que no sé lo que es el Dish.
Es que lo entiendo porque a la gente no le gusta nada el tema del Dish, es que me lÃo, es que me cuesta.
Pues es que es normal, porque si a la mÃnima te vas, cuando empiezan las cosas complicadas, es que es normal.
Luego te quejarás, es que nadie me ha explicado nunca el Dish, nunca me lo has explicado, pero es que es normal.
Es que a la mÃnima que cuesta, ay, es que ahora está difÃcil Javascript, es que está difÃcil Javascript, ya no quiero más Javascript.
Te avisé.
Asà que vamos a ello, va, que ahora lo vas a entender, no te preocupes.
Pero si aún estáis aquÃ, unos cuantos, pero bueno, a ver.
No, pero es verdad que estábamos casi 900, ha empezado el Dish y ha hecho...
Hasta luego, yo me voy.
Mi trabajo aquà ha terminado.
Qué bueno.
No es que sea difÃcil, es que es un lenguaje con muchas lagunas que le queda mucho por mejorar.
No, no estoy de acuerdo.
No es que tenga lagunas, es que hay que saber entenderlo.
Es que es normal, si no lo entiendes, si no sabes lo que hace, pues al final lo que pasa es normal.
Cosa que te parezca muy raro, que tenga lagunas y tal.
Es que está hecho asÃ.
Tiene cosas que no son perfectas, pero es que no hay muchos lenguajes que sean perfectos, la verdad.
No, no fuimos a googlear Dish.
No te digas.
Vale, venga, vamos con ello, va, que os voy a explicar.
Os explico, ¿vale?
Venga.
Tenemos una función que es getName, que está utilizando Dish, ¿vale?
Este Dish se refiere al dueño que está haciendo la llamada de esta función, ¿vale?
¿Quién es el dueño?
Si yo lo llamo aquÃ, el dueño es global.
Global es una variable también especial que se refiere a la variable global, ¿no?
O global Dish y en el cliente es window.
Son iguales.
Estas tres son iguales.
Son iguales, ¿vale?
Ahora, ¿por qué es undefined?
Porque como podemos ver, en la variable global no tenemos nada.
O sea, no tenemos .nic.
O sea, es que no hay nada.
Entonces, voy a hacer un console.log de Dish para que veáis hasta aquÃ.
¿Vale?
¿Veis?
Que tenemos aquà todo el objeto global.
Aquà está todo el objeto global.
Mira, window.
Ah, mira, sà que se puede utilizar window.
Ah, pues mira, no tenÃa idea.
Windows, self, document.
Aquà todo lo que podéis utilizar, ¿vale?
Perfecto.
Pero no hay nick.
¿Por qué no hay nick?
Porque en global, que es la variable global, deberÃamos poner nick.
Vamos a poner aquà global nick.
¿Vale?
Asà que ahora, en este caso, podemos ver que el console.log, mi nombre es...
Vamos a poner nick.
Vale.
Mi nombre es global nick.
Hasta aquà bien, ¿no?
Perfecto.
Usa console.table.
¿Para qué?
Si es una...
No tiene ningún tipo...
Ah, para lo otro.
Pero será un momento, ¿eh?
¿Por qué el objeto global sà está en scope de getName?
El objeto global, en este caso, Dish...
Esto no es el objeto global.
Esto es Dish.
Y Dish, en este caso, es el objeto global.
Porque el dueño de la llamada, de la ejecución de esta función, está en la lÃnea 9,
que justamente, ¿quién lo ha llamado?
El objeto global.
Y por lo tanto, ya lo tendrÃas.
¿Vale?
Hasta aquà bien, ¿no?
Hasta aquÃ, todo claro.
Hasta aquÃ, Dish apunta a una variable global.
En este caso, sÃ.
En este caso, sÃ.
¿Vale?
¿Por qué?
Porque esta lÃnea, la 9, lo está haciendo, lo está haciendo justamente la variable global,
la que está ejecutando getName.
El dueño...
Este Dish, sà lo entiendo.
Vale, venga, va.
Vamos a por el siguiente, ¿eh?
No entiendo de dónde viene ese global.
Es que este global es una variable que ya está disponible.
O sea, es que hay una cosa que tenéis que tener en cuenta.
Si yo pongo aquà window, es como si alguien me pregunta, oye, es que no entiendo de dónde viene window.
¿Dónde viene window?
¿De dónde viene global this?
Pues global this y window son variables especiales que son globales.
Globales es porque están disponibles en todos los contextos de ejecución de tu programa y que están ahÃ, ¿sabes?
Entonces, hay que tenerlo en cuenta.
Y en este caso, también this.
This también siempre es una variable especial.
Lo que pasa es que this va a ir cambiando su valor dependiendo de dónde se esté, dónde se encuentra.
¿Vale?
Asà que window, global this y this, en este caso, es lo mismo.
Pero ahora vamos a ver cuándo cambia this.
Mientras que window y global this, que son la misma variable, tienen el mismo valor, nunca cambian,
this su valor va a ir cambiando dependiendo justamente quién es el dueño de la ejecución de esa función.
¿Vale?
Asà que en este caso, esta función getName, tenemos que this.nic, ahora es mi nombre es globalnic.
¿Vale?
Porque justamente en global, que esto serÃa como poner window, que creo que se puede poner.
¿Vale?
Window.nic, tenemos globalnic.
¿Está aquà bien?
Claro, global this y window nunca cambian.
Nunca cambian.
¿Vale?
Nunca cambian.
¿S�
Vale.
Perfecto.
Hasta aquà bien.
Ahora bien, ¿qué pasa con este this?
Como hemos visto, ahora es el objeto global.
Pero, si yo creo un objeto, por ejemplo, vamos a crear aquà un objeto que se llame midudev.
¿Vale?
Y voy a poner que su nick es midudev.
Y vamos a tener una función que se llama getName, que justamente es esta función getName.
¿Vale?
¿Hasta aquà bien?
Ahora vamos a poner midudev.getName.
La voy a ejecutar.
Y fÃjate que al ejecutarse tenemos mi nombre es midudev.
¿Por qué ha cambiado?
¿Qué es lo diferente que hay entre la lÃnea 9 y la lÃnea 16?
¿Cuál es la diferencia?
La diferencia es que en la lÃnea 9, el dueño de la ejecución de esta función es el objeto global.
Y por lo tanto, el objeto global, lo que está pasando, es que lo tenemos aquà en this.
Pero en la lÃnea 16, el dueño de la ejecución de este método, getName, es el objeto midudev.
Por lo tanto, este objeto que vemos aquà es el que llegará aquà en this.
De hecho, lo vas a poder ver asÃ.
Voy a poner esto aquÃ, esto asÃ.
Voy a hacer un console.log de this.
¿Vale?
Console.log de this.
Y vas a ver que this, lo que tiene es nick midudev, getName, getName.
¿Vale?
O sea, el objeto this ahora se refiere a este objeto.
Entonces, ¿cuál es la diferencia?
La diferencia es justamente que el dueño de la ejecución de esa función es diferente.
Mientras que este de la lÃnea 10 era el objeto global, este de la lÃnea 17 es el objeto midudev.
Ya está.
El contexto de ejecución ha cambiado, es diferente.
Por lo tanto, this, que se refiere como al dueño que es el que se está preocupando de que se ejecute esto, pues ya está.
Claro, si yo pongo window.getName, pues pasa lo mismo que antes.
Window.getName, lo que vamos a ver es que me va a volver, bueno, va a hacer el console.log este.
Va a ser mi nombre es undefined, porque ahora mismo no tenemos en ningún sitio.
Porque this.nick no está en window.
Pero aquà tenemos dos dueños diferentes, midudev y window.
Es la misma función, pero this se convierte en una cosa distinta.
Da igual que hagas this.midudev.
Si hagas this.midudev, vas a ver que también es midudev.
Porque midudev es el último owner de la ejecución.
¿Y si son arrow function funciona igual?
Obviamente no, el iya, porque las arrow functions no tienen this en este caso.
Si, por ejemplo, le pondrÃamos aquà una arrow function,
lo que vamos a ver, para empezar, es que claro, esto no estarÃa ya en el score global,
pero bueno, vamos a ver que es undefined.
Porque el this que tenemos aquà no serÃa el objeto, ¿vale?
Justamente las arrow functions no añaden el contexto de ejecución.
No pueden ser owners de la ejecución de una función.
Esto es una cosa que la simplifica bastante.
¿Arrow function, objeto global?
No siempre, matiki.
Mira, es muy interesante, pero para que os folle la mente ya del todo,
tenéis que tener en cuenta que esta arrow function sà que es verdad
que no añade un this, y tampoco se le puede utilizar el .call, el .apply y todo esto.
Pero, claro, si esto estuviese dentro de otro contexto de ejecución
que sà que serÃa una función, o sea, por ejemplo, function context
y haces esto
y esto lo ejecutas asÃ
y esto haces context, context, ¿vale?
Y haces context
getName
Esto lo quitamos
Vale, aquà puedes ver, hay que tener en cuenta, o sea,
lo que no quiero es que penséis
Si es una arrow function, seguro que el this es el objeto global
No tiene por qué
Lo que tenéis que entender es cómo realmente funciona cada cosa, ¿vale?
En este caso, la arrow function no tiene, o sea, no tiene valor this
No se lo pone directamente
Pero, como está dentro de una función, dentro de un contexto
Por lo tanto, este this es el del contexto de esta función
Y aquà le he pasado a mà mismo
Mi dudes.context y cambia el this
¿Por qué con la arrow function sola no funciona?
Porque la arrow function no bindea el valor de this
Simplemente
Ya está
Si reemplazas la arrow function por function común
Nick es undefined, ¿no?
No sé
Me quedo con que this es el owner de quien ejecuta la función
SÃ
Lo único que tenéis que tener claro
Es que las arrow functions no bindean el valor de this, ¿vale?
No pueden ser owners
Con que eso lo tengáis claro
Las arrow functions son una excepción
Y no pueden ser owners
Y por lo tanto no tienen contexto de ejecución
Bueno, vamos a dejar el this
Que veo que os ha follado la mente
Bindear básicamente es cambiarle el valor a this
No le puede cambiar el valor de this
No tiene un contexto de ejecución
En las arrow functions
Y por lo tanto no puede ser owner
Y por lo tanto no le cambia el valor a this
Vamos a dejar el this
Porque es que os ha dejado
¿Qué es blindea?
No es blindea
Es bindea
Bindea significa
Como otorgarle un valor a algo
Ya solo quedamos
SÃ, sÃ
Como sigamos hablando del this
Ya
O sea, dentro de poco nos vamos todos
Me voy
Me tengo que ir a trabajar
Eso dice Julidón
Pero en realidad te vas por el this
Por el this murieron 150 personas
Ya te digo, ¿eh?
Ya te digo
This is Esparta
¿Se puede decir que las arrow functions
¿Qué pasa?
Ya te digo
Ahora
Porque la�za
Esparta
Esparta
Ya te digo
A ver
Ya te digo
Seight
Y
far
Ya te digo
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
I