Αποχρώσεις του πεδίου εφαρμογής των μεταβλητών σε δομές if-else στην JavaScript

Το πεδίο εφαρμογής των μεταβλητών έχει μια ορισμένη απόχρωση. Ας την εξετάσουμε με ένα παράδειγμα. Ας δηλώσουμε έξω από την συνθήκη μας μια μεταβλητή res με μια τιμή, και μέσα στην συνθήκη αλλάξουμε αυτή την τιμή σε μια άλλη:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // θα εμφανίσει 2

Όπως βλέπετε, η μεταβλητή res άλλαξε μέσα στην συνθήκη. Όλα, ωστόσο, αλλάζουν, αν μέσα στην συνθήκη δηλώσουμε επίσης τη μεταβλητή res μέσω let:

javascriptlet res = 1;

if (true) {
  let res = 2; // δηλώνουμε τη μεταβλητή μέσω let
}

console.log(res); // θα εμφανίσει 1, και όχι 2!

Εδώ το όλο θέμα είναι ότι η δήλωση της μεταβλητής μέσω let μέσα στην συνθήκη δημιούργησε μια τοπική μεταβλητή res.

Δηλαδή μέσα στην συνθήκη υπάρχει μια μεταβλητή res, και έξω από την συνθήκη - μια άλλη. Μπορούμε να το διαπιστώσουμε, εμφανίζοντας την τιμή της μεταβλητής στην κονσόλα μέσα στην συνθήκη:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // θα εμφανίσει 2
}

console.log(res); // θα εμφανίσει 1
Задание 1

Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει έναν έλεγχο ηλικίας για το αν έχει φτάσει τα 18 χρόνια. Ο κώδικας, ωστόσο, για οποιαδήποτε τιμή ηλικίας εμφανίζει στην κονσόλα την τιμή undefined. Διορθώστε το λάθος του συγγραφέα του κώδικα. Ο προβληματικός κώδικας:

javascriptlet age = 17;
let adult;

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

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

Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει έναν έλεγχο ηλικίας για το αν έχει φτάσει τα 18 χρόνια. Μετά τον έλεγχο του κώδικα αποδείχθηκε ότι αν η ηλικία είναι ίση ή μεγαλύτερη των 18 ετών, τότε στη μεταβλητή adult γράφεται true, όπως θα έπρεπε, ωστόσο, αν η ηλικία είναι μικρότερη των 18, τότε η μεταβλητή adult έχει την τιμή undefined. Διορθώστε το λάθος του συγγραφέα του κώδικα.

Ο προβληματικός κώδικας:

javascriptlet age = 17;
let adult;

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

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

Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει έναν έλεγχο ηλικίας. Ο κώδικας, ωστόσο, για οποιαδήποτε τιμή ηλικίας εμφανίζει στην κονσόλα την τιμή undefined. Διορθώστε το λάθος του συγγραφέα του κώδικα.

Ο προβληματικός κώδικας:

javascriptlet 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);
Задание 4

Ο συγγραφέας του παρακάτω κώδικα ήθελε να εκτελέσει έναν έλεγχο ηλικίας. Ο κώδικας, ωστόσο, για τιμή ηλικίας μεγαλύτερη των 18 ετών εμφανίζει στην κονσόλα την τιμή undefined. Διορθώστε το λάθος του συγγραφέα του κώδικα.

Ο προβληματικός κώδικας:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'από 18 έως 23';
  } else {
    res = 'μεγαλύτερο από 23';
  }
} else {
  res = 'μικρότερο από 18';
}

console.log(res);