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:
let 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:
let 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:
let res = 1;
if (true) {
let res = 2;
console.log(res); // izpiše 2
}
console.log(res); // izpiše 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:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
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:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
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:
let 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);
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:
let 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);