Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: bermartinv en 02 de Marzo 2016, 16:28

Título: JavaScript qué significa this ámbitos scope anidamiento closure qué es CU01168E#
Publicado por: bermartinv en 02 de Marzo 2016, 16:28
Estas son mis respuestas para el tema CU01168E del curso JavaScript desde cero.

Citar
a) ¿Por qué se muestran diferentes mensajes si en ambos alert estamos invocando this?

Aunque usamos la misma palabra this, como la usamos en diferentes sitios hace referencia a distintos sitios. El primer this hace referencia al evento que es asignado de la variable cabecera, que esta proviene de la etiqueta que tiene el identificador #cabecera.Por eso al hacer alert de este this nos sale:

            object HTMLDivElement


El segundo this lo encontramos en una función que está dentro de otra función. Por lo que este this hace referencia a la definicion de esta funcion. Por eso al hacer alert de este this nos sale:

           objectWindow


Citar
b) Modifica el código para que el mensaje que se muestre con retardo muestre lo mismo que el mensaje que se muestra sin retardo. Para ello, haz que en la función anónima sea conocida la referencia a this que existe en la funcion externa.

Código: [Seleccionar]
b)
Saludos.
Título: Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
Publicado por: Mario R. Rancel en 04 de Marzo 2016, 10:09
Buenos días creo que te ha faltado el código del apartado b), aparece la pregunta en vez del código
 
Saludos
Título: Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
Publicado por: bermartinv en 06 de Marzo 2016, 18:03
Si, perdón  :-[ . Adjunto el código:
Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<script type="text/javascript">

function ejemplo() {

var cabecera = document.querySelector('#cabecera');

var respuestaCabecera = function () {

    var that = this;
   
    alert(this);

  setTimeout(function () { alert(that);}, 2000);

};

cabecera.addEventListener('click', respuestaCabecera, false);

}

</script>

</head>

<body onload="ejemplo()"><div id="cabecera"><h2>Cursos aprenderaprogramar.com HAZ CLICK AQUÍ</h2><h3>Ejemplos JavaScript</h3></div>

</body>
</html

Saludos.
Título: Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
Publicado por: César Krall en 07 de Marzo 2016, 09:14
Hola!

Todo bien

En el código propuesto se aplica la explicación del curso: " Toda función define un ámbito y una función dentro de otra función puede hacer que this no se refiera a lo mismo según dónde lo usemos. Por ejemplo, si tenemos una función anónima dentro de otra, this en la función externa puede estar haciendo referencia al objeto envolvente mientras que this en la función anónima puede estar haciendo referencia al objeto global window.

La solución para mantener una referencia a this en una función anónima interna puede estar en crear un closure. Definiríamos como variable local a la función externa var that = this;, y luego en la función anónima interna haríamos referencia a that, variable auxiliar que nos sirve para mantener la referencia deseada."

Saludos!