Muuttujien näkyvyysalueen vivahteet if-else-rakenteissa JavaScriptissä

Muuttujien näkyvyysalueella on tiettyjä vivahteita. Katsotaanpa sitä esimerkin avulla. Esittelemme ehdon ulkopuolella muuttujan res yhdellä arvolla, ja ehdon sisällä muutamme tämän arvon toiseksi:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // tulostaa 2

Kuten näet, muuttuja res muuttui ehdon sisällä. Kaikki kuitenkin muuttuu, jos ehdon sisällä esitellään myös muuttuja res käyttäen let:

javascriptlet res = 1;

if (true) {
  let res = 2; // esitellään muuttuja let:llä
}

console.log(res); // tulostaa 1, eikä 2!

Asia on siinä, että muuttujan esittely käyttäen let ehdon sisällä loi paikallisen muuttujan res.

Eli ehdon sisällä on olemassa yksi muuttuja res, ja ehdon ulkopuolella - toinen. Tämä voidaan varmistaa tulostamalla muuttujan arvo konsoliin ehdon sisällä:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // tulostaa 2
}

console.log(res); // tulostaa 1
Задание 1

Alla olevan koodin authori halusi suorittaa ikätarkistuksen 18 vuoden täyttämiselle. Kodi kuitenkin tulostaa konsoliin arvon undefined riippumatta iän arvosta. Korjaa koodin authorin virhe. Tässä on ongelmallinen koodi:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 2

Alla olevan koodin authori halusi suorittaa ikätarkistuksen 18 vuoden täyttämiselle. Koodin tarkistuksen jälkeen kävi ilmi, että jos ikä on yhtä suuri tai suurempi kuin 18 vuotta, niin muuttujaan adult kirjoitetaan true, kuten pitääkin, mutta jos ikä on pienempi kuin 18, niin muuttuja adult saa arvon undefined. Korjaa koodin authorin virhe.

Tässä on ongelmallinen koodi:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

Alla olevan koodin authori halusi suorittaa ikätarkistuksen. Kodi kuitenkin tulostaa konsoliin arvon undefined riippumatta iän arvosta. Korjaa koodin authorin virhe.

Tässä on ongelmallinen koodi:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = '18-23';
  } else {
    let res = 'yli 23';
  }
} else {
  let res = 'alle 18';
}

console.log(res);
Задание 4

Alla olevan koodin authori halusi suorittaa ikätarkistuksen. Kodi kuitenkin tulostaa konsoliin arvon undefined, kun ikä on suurempi kuin 18 vuotta. Korjaa koodin authorin virhe.

Tässä on ongelmallinen koodi:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = '18-23';
  } else {
    res = 'yli 23';
  }
} else {
  res = 'alle 18';
}

console.log(res);