Nianse področja veljavnosti spremenljivk v konstrukcijah if-else v JavaScriptu

Področje veljavnosti spremenljivk ima določene nianse. Oglejmo si jih na primeru. Izven našega pogoja deklarirajmo spremenljivko res z eno vrednostjo, znotraj pogoja pa spremenimo to vrednost na drugo:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // izpiše 2

Kot vidite, se je spremenljivka res spremenila znotraj pogoja. Vse pa se bo spremenilo, če znotraj pogoja tudi deklariramo spremenljivko res prek let:

javascriptlet res = 1;

if (true) {
  let res = 2; // deklarirajmo spremenljivko prek let
}

console.log(res); // izpiše 1, ne 2!

Tukaj je bistvo v tem, da je deklaracija spremenljivke prek let znotraj pogoja ustvarila lokalno spremenljivko res.

To pomeni, da znotraj pogoja obstaja ena spremenljivka res, zunaj pogoja pa druga. Prepričati se lahko tako, da vrednost spremenljivke izpišemo v konzolo znotraj pogoja:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // izpiše 2
}

console.log(res); // izpiše 1
Задание 1

Avtor spodnje kode je želel izvesti preverbo starosti za dosego 18 let. Koda pa pri kateri koli vrednosti starosti izpiše v konzolo vrednost undefined. Popravite napako avtorja kode. Tu je problematična koda:

javascriptlet age = 17;
let adult;

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

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

Avtor spodnje kode je želel izvesti preverbo starosti za dosego 18 let. Po preverbi kode se je izkazalo, da če je starost enaka ali večja od 18 let, potem se v spremenljivko adult zapiše true, kot bi moralo biti, vendar, če je starost manjša od 18, ima spremenljivka adult vrednost undefined. Popravite napako avtorja kode.

Tu je problematična koda:

javascriptlet age = 17;
let adult;

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

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

Avtor spodnje kode je želel izvesti preverbo starosti. Koda pa pri kateri koli vrednosti starosti izpiše v konzolo vrednost undefined. Popravite napako avtorja kode.

Tu je problematična koda:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'od 18 do 23';
  } else {
    let res = 'več kot 23';
  }
} else {
  let res = 'manj kot 18';
}

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

Avtor spodnje kode je želel izvesti preverbo starosti. Koda pa pri vrednosti starosti večji od 18 let izpiše v konzolo vrednost undefined. Popravite napako avtorja kode.

Tu je problematična koda:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'od 18 do 23';
  } else {
    res = 'več kot 23';
  }
} else {
  res = 'manj kot 18';
}

console.log(res);