Autor Tema: Use strict JavaScript ReferenceError: assignment to undeclared variable CU01189E  (Leído 2139 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Dejo una posible solución de los ejercicios de la entrega CU01189E del curso JavaScript desde cero.

Citar
EJERCICIO 1

Dado este fragmento de código. Revísalo y responde a las siguientes preguntas:

Código: [Seleccionar]
var persona1 = {};

Object.defineProperty(persona1, "edad", { value: 42, writable: false });

persona1.edad = 19;

Citar
a) Explica paso a paso el significado de este código (busca información en internet si te es preciso).

var persona1 = {}; Creamos un objeto de tipo "persona1"

Object.defineProperty(persona1, "edad", { value: 42, writable: false }); Mediante el método "Object.defineProporty()" definimos las propiedades del objeto "persona1". En este caso definimos la propiedad "edad", le damos un valor de "42" y establecemos que no será reescribible a través de la propiedad "writable: false". Si fuera "writable: true" podríamos cambiar el valor de la propiedad "edad" posteriormente.

persona1.edad = 19; Intentamos cambiar el valor de la propiedad "edad" a "19". Digo "intentamos" porque anteriormente vimos que está propiedad la establecimos como no variable (de algún modo podriamos decir que actuará como una constante).

Citar
b) Crea un pequeño script donde se ejecute este código y se muestre un mensaje por pantalla informando del valor de la edad. Activa la consola para comprobar si aparece algún error.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

persona1 = {};
Object.defineProperty(persona1,'edad',{value:42, writable: false});
persona1.edad = 19;
alert(persona1.edad);

</script>
</head>
<body>

</body>
</html>

No aparece ningún tipo de error.

Citar
c) Crea el mismo script pero usando strict mode. Activa la consola y comprueba si aparece algún error. ¿Qué diferencias observas entre la ejecución con strict mode y sin strict mode? ¿Qué explicación le darías a estas diferencias? ¿Crees que sería positivo que este código se escribiera en strict mode o no? ¿Por qué?

Cuando el código se ejecuta bajo la instrucción "use strict" nos aparece el error: "ReferenceError: assignment to undeclared variable persona1". En cambio, en modo normal (no estricto) no aparece dicho error y el código acaba ejecutándose del todo. En modo estricto se detiene al detectar el error.
Personalmente creo que los códigos se tendrían que escribir con una síntaxis "correcta". Para la funcionalidad de este código no sería positivo ejecutarlo en modo estricto, más que nada, porque se detendría al detectar el error. De forma general, creo que sería positivo haberse escrito en modo strict porque así el programador observará el error y hubiera declarado la variable "persona1" porque si hubiera continuado el código y se hubiera incluido otra ambiente con una variable que tenga el mismo nombre habría conflicto de interpretación a la hora de ejecutar el código.

Citar
EJERCICIO 2

Crea y ejecuta un script que use with y que esté:

a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function ejemplo(){
with(document.getElementById('cabecera').style){
color = "black";
width = "200px";
padding = "20px";
fontSize = "32px";
}
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;" onclick="ejemplo()">Probar</div>
</body>
</html>

Cuando hacemos click sobre "probar" se ejecuta el código con la función "ejemplo()". El div con id="cabecera"  adopta la propiedades especificadas en el código. Es decir, un color negro (de contenido, no de fondo), un ancho de 200px, un relleno de 20px y un tamaño de fuente de 32px.

Citar
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function ejemplo(){
'use strict';
with(document.getElementById('cabecera').style){
color = "black";
width = "200px";
padding = "20px";
fontSize = "32px";
}
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;" onclick="ejemplo()">Probar</div>
</body>
</html>

Citar
with ha pasado a considerarse no permitido en strict mode (donde obtendremos un error de tipo <<SyntaxError: strict mode code may not contain 'with' statements>>) y se considera que terminará por desaparecer (o ser replanteado de otra manera).

Gracias.
« Última modificación: 03 de Mayo 2016, 09:41 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenos días, veo el ejercicio completo y con respuestas acertadas.

Saludos.

 

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".