Področje veljavnosti spremenljivk v if-else v JavaScript

Za preprostost vzemimo, da imamo vedno izpolnjen pogoj:

javascriptif (true) {
  
}

Oglejmo si naslednjo kodo:

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

console.log(res);

Kot lahko vidite, bi se morala v spremenljivko res zapisati vrednost '!'. Vendar, če zaženemo to kodo, se bo v konzolo izpisala napaka!

Bistvo je v tem, da so spremenljivke, deklarirane znotraj zavitih oklepajev, vidne samo znotraj teh oklepajev in niso vidne zunaj. Znanstveno rečeno gre tukaj za področje veljavnosti spremenljivk.

Lahko rečemo, da je področje veljavnosti spremenljivk, deklariranih znotraj zvitih oklepajev, omejeno le na te zavite oklepaje. Vendar, če je spremenljivka deklarirana zunaj zvitih oklepajev, je vidna tako znotraj njih kot zunaj:

javascriptlet res; // spremenljivka deklarirana zunaj

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

console.log(res); // bo izpisal '!'

V naslednjem primeru se v spremenljivko res glede na pogoj zapiše bodisi vrednost 1, bodisi vrednost 2:

javascriptlet num = 5;

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

console.log(res);

Vendar, če zaženemo to kodo, se bo v konzolo izpisala napaka. Kot zdaj razumete, je ves problem v vidnosti spremenljivk. Za rešitev težave deklarirajmo spremenljivko zunaj pogoja:

javascriptlet test = true;
let res; // deklarirajmo spremenljivko zunaj pogoja

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

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

Avtor spodnje kode je želel izvesti preverjanje starosti za dopolnitev 18 let. Koda pa ne deluje. Popravite napako avtorja kode. Tukaj je problematična koda:

javascriptlet age = 17;

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

console.log(adult);