Matices del ámbito de las variables en las construcciones if-else en JavaScript
El ámbito de las variables tiene un cierto
matiz. Considerémoslo con un ejemplo.
Declaremos fuera de nuestra condición la variable
res con un valor, y dentro de
la condición cambiemos este valor a otro:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // mostrará 2
Como puedes ver, la variable res cambió
dentro de la condición. Sin embargo, todo cambiará,
si dentro de la condición también declaramos la variable
res mediante let:
let res = 1;
if (true) {
let res = 2; // declaremos la variable mediante let
}
console.log(res); // mostrará 1, ¡no 2!
Aquí la cuestión es que la declaración de la variable
mediante let dentro de la condición creó una variable local
res.
Es decir, dentro de la condición existe una variable
res, y fuera de la condición - otra.
Podemos convencernos de esto, mostrando el valor de la variable
en la consola dentro de la condición:
let res = 1;
if (true) {
let res = 2;
console.log(res); // mostrará 2
}
console.log(res); // mostrará 1
El autor del código a continuación quería realizar
una verificación de edad para alcanzar los 18
años. Sin embargo, el código para cualquier valor de edad
muestra en la consola el valor undefined.
Corrige el error del autor del código. Aquí está el código problemático:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
El autor del código a continuación quería realizar
una verificación de edad para alcanzar los 18
años. Después de verificar el código, resultó que si
la edad es igual o mayor a 18 años, entonces
en la variable adult se escribe true,
como debería ser, sin embargo, si la edad es menor
a 18, entonces la variable adult tiene
el valor undefined. Corrige el error
del autor del código.
Aquí está el código problemático:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
El autor del código a continuación quería realizar
una verificación de edad. Sin embargo, el código para cualquier
valor de edad muestra en la consola el valor
undefined. Corrige el error del autor del código.
Aquí está el código problemático:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'de 18 a 23';
} else {
let res = 'más de 23';
}
} else {
let res = 'menos de 18';
}
console.log(res);
El autor del código a continuación quería realizar
una verificación de edad. Sin embargo, el código para un valor
de edad mayor a 18 años muestra en
la consola el valor undefined. Corrige
el error del autor del código.
Aquí está el código problemático:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'de 18 a 23';
} else {
res = 'más de 23';
}
} else {
res = 'menos de 18';
}
console.log(res);