Muuttujien näkyvyysalue if-else -lauseissa JavaScriptissä

Oletetaan yksinkertaisuuden vuoksi, että meillä on aina toteutuva ehto:

javascriptif (true) {
  
}

Tarkastellaan seuraavaa koodia:

javascriptif (true) {
  let res = '!';
}

console.log(res);

Kuten näet, muuttujaan res pitäisi tallentua arvo '!'. Kuitenkin, jos suoritat tämän koodin, konsoliin tulostuu virhe!

Asia on siinä, että muuttujat, jotka on määritelty aaltosulkeiden sisällä, ovat näkyvissä vain niiden sisällä, eivätkä näy ulkopuolella. Tieteellisesti ilmaisten kyse on muuttujien näkyvyysalueesta.

Voidaan sanoa, että aaltosulkeiden sisällä määriteltyjen muuttujien näkyvyysalueena ovat vain nuo aaltosulkeet. Kuitenkin, jos muuttuja on määritelty aaltosulkeiden ulkopuolella, se on näkyvissä sekä niiden sisällä että ulkopuolella:

javascriptlet res; // muuttuja määritelty ulkopuolella

if (true) {
  res = '!';
}

console.log(res); // tulostaa '!'

Seuraavassa esimerkissä muuttujaan res ehdosta riippuen tallennetaan joko arvo 1 tai arvo 2:

javascriptlet num = 5;

if (num >= 0) {
  let res = 1;
} else {
  let res = 2;
}

console.log(res);

Kuitenkin, jos suoritat tämän koodin, konsoliin tulostuu virhe. Kuten nyt jo ymmärrät, kyse on muuttujien näkyvyydestä. Ongelman ratkaisemiseksi määritellään muuttuja ehdon ulkopuolelle:

javascriptlet test = true;
let res; // määritellään muuttuja ehdon ulkopuolelle

if (test) {
  res = 1;
} else {
  res = 2;
}

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

Alla olevan koodin kirjoittaja halusi tarkistaa onko ikä vähintään 18 vuotta. Koodi ei kuitenkaan toimi. Korjaa koodin kirjoittajan virhe. Tässä on ongelmallinen koodi:

javascriptlet age = 17;

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

console.log(adult);