Αποχρώσεις του πεδίου εφαρμογής των μεταβλητών σε δομές if-else στην JavaScript
Το πεδίο εφαρμογής των μεταβλητών έχει μια ορισμένη
απόχρωση. Ας την εξετάσουμε με ένα παράδειγμα.
Ας δηλώσουμε έξω από την συνθήκη μας μια μεταβλητή
res με μια τιμή, και μέσα στην
συνθήκη αλλάξουμε αυτή την τιμή σε μια άλλη:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // θα εμφανίσει 2
Όπως βλέπετε, η μεταβλητή res άλλαξε
μέσα στην συνθήκη. Όλα, ωστόσο, αλλάζουν,
αν μέσα στην συνθήκη δηλώσουμε επίσης τη μεταβλητή
res μέσω let:
let res = 1;
if (true) {
let res = 2; // δηλώνουμε τη μεταβλητή μέσω let
}
console.log(res); // θα εμφανίσει 1, και όχι 2!
Εδώ το όλο θέμα είναι ότι η δήλωση της μεταβλητής
μέσω let μέσα στην συνθήκη δημιούργησε μια τοπική
μεταβλητή res.
Δηλαδή μέσα στην συνθήκη υπάρχει μια μεταβλητή
res, και έξω από την συνθήκη - μια άλλη.
Μπορούμε να το διαπιστώσουμε, εμφανίζοντας την τιμή της μεταβλητής
στην κονσόλα μέσα στην συνθήκη:
let res = 1;
if (true) {
let res = 2;
console.log(res); // θα εμφανίσει 2
}
console.log(res); // θα εμφανίσει 1
Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει
έναν έλεγχο ηλικίας για το αν έχει φτάσει τα 18
χρόνια. Ο κώδικας, ωστόσο, για οποιαδήποτε τιμή ηλικίας
εμφανίζει στην κονσόλα την τιμή undefined.
Διορθώστε το λάθος του συγγραφέα του κώδικα. Ο προβληματικός κώδικας:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει
έναν έλεγχο ηλικίας για το αν έχει φτάσει τα 18
χρόνια. Μετά τον έλεγχο του κώδικα αποδείχθηκε ότι αν
η ηλικία είναι ίση ή μεγαλύτερη των 18 ετών, τότε
στη μεταβλητή adult γράφεται true,
όπως θα έπρεπε, ωστόσο, αν η ηλικία είναι μικρότερη
των 18, τότε η μεταβλητή adult έχει
την τιμή undefined. Διορθώστε το λάθος
του συγγραφέα του κώδικα.
Ο προβληματικός κώδικας:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει
έναν έλεγχο ηλικίας. Ο κώδικας, ωστόσο, για οποιαδήποτε
τιμή ηλικίας εμφανίζει στην κονσόλα την τιμή
undefined. Διορθώστε το λάθος του συγγραφέα του κώδικα.
Ο προβληματικός κώδικας:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'από 18 έως 23';
} else {
let res = 'μεγαλύτερο από 23';
}
} else {
let res = 'μικρότερο από 18';
}
console.log(res);
Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει
έναν έλεγχο ηλικίας. Ο κώδικας, ωστόσο, για τιμή
ηλικίας μεγαλύτερη των 18 ετών εμφανίζει στην
κονσόλα την τιμή undefined. Διορθώστε
το λάθος του συγγραφέα του κώδικα.
Ο προβληματικός κώδικας:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'από 18 έως 23';
} else {
res = 'μεγαλύτερο από 23';
}
} else {
res = 'μικρότερο από 18';
}
console.log(res);