Autor Tema: JavaScript qué significa this ámbitos scope anidamiento closure qué es CU01168E#  (Leído 2982 veces)

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
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.
« Última modificación: 23 de Julio 2017, 22:31 por Ogramar »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
« Respuesta #1 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

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
« Respuesta #2 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.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:JavaScript qué significa this ámbitos scope anidamiento CU01168E
« Respuesta #3 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!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".