Mainīgo loku nianses if-else konstrukcijās JavaScript
Mainīgo loku ir sava nianse.
Apskatīsim to ar piemēru.
Izveidosim ārpus mūsu nosacījuma mainīgo
res ar vienu vērtību, bet iekšā
nosacījumā mainīsim šo vērtību uz citu:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // izvadīs 2
Kā redzat, mainīgais res mainījās
iekšā nosacījumā. Tomēr viss mainīsies,
ja iekšā nosacījumā arī deklarēsiet mainīgo
res ar let:
let res = 1;
if (true) {
let res = 2; // deklarēsim mainīgo ar let
}
console.log(res); // izvadīs 1, nevis 2!
Šeit visa būtība ir tajā, ka mainīgā deklarēšana
ar let iekšā nosacījuma izveidoja lokālo
mainīgo res.
Tas ir, iekšā nosacījuma pastāv viens mainīgais
res, bet ārpus nosacījuma - cits.
To var pārliecināties, izvadot mainīgā vērtību
konsole iekšā nosacījuma:
let res = 1;
if (true) {
let res = 2;
console.log(res); // izvadīs 2
}
console.log(res); // izvadīs 1
Zemāk redzamā koda autors gribēja veikt
vecuma pārbaudi uz sasniegšanu 18
gadiem. Tomēr kodā jebkurai vecuma vērtībai
tiek izvadīta konsolē vērtība undefined.
Izlabojiet koda autora kļūdu. Lūk, problemātiskais kods:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Zemāk redzamā koda autors gribēja veikt
vecuma pārbaudi uz sasniegšanu 18
gadiem. Pēc koda pārbaudes izrādījās, ka, ja
vecums ir vienāds vai lielāks par 18 gadiem, tad
mainīgajā adult tiek ierakstīts true,
kā tam vajadzētu būt, tomēr, ja vecums ir mazāks
par 18, tad mainīgajam adult ir
vērtība undefined. Izlabojiet koda autora kļūdu.
Lūk, problemātiskais kods:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Zemāk redzamā koda autors gribēja veikt
vecuma pārbaudi. Tomēr kodā jebkurai
vecuma vērtībai tiek izvadīta konsolē vērtība
undefined. Izlabojiet koda autora kļūdu.
Lūk, problemātiskais kods:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'no 18 līdz 23';
} else {
let res = 'vairāk par 23';
}
} else {
let res = 'mazāk par 18';
}
console.log(res);
Zemāk redzamā koda autors gribēja veikt
vecuma pārbaudi. Tomēr kodā ar vecuma vērtību
lielāku par 18 gadiem tiek izvadīta
konsolē vērtība undefined. Izlabojiet
koda autora kļūdu.
Lūk, problemātiskais kods:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'no 18 līdz 23';
} else {
res = 'vairāk par 23';
}
} else {
res = 'mazāk par 18';
}
console.log(res);