Πανομοιότυπα ονόματα μεταβλητών σε συναρτήσεις στην JavaScript
Ας υποθέσουμε ότι υπάρχει μια μεταβλητή
num τόσο έξω από τη συνάρτηση, όσο και μέσα. Σε αυτή την περίπτωση, οποιεσδήποτε αλλαγές
στην τοπική μεταβλητή num δεν επηρεάζουν
με κανέναν τρόπο την καθολική μεταβλητή num:
let num = 1; // καθολική μεταβλητή
function func() {
let num = 2; // τοπική μεταβλητή
console.log(num);
}
func(); // καλούμε τη συνάρτηση, θα εμφανίσει 2
console.log(num); // θα εμφανίσει 1 - η καθολική μεταβλητή δεν άλλαξε
Όμως, αν ξεχάσουμε να δηλώσουμε την τοπική μεταβλητή
num μέσω του let, τότε μέσα στη συνάρτηση
δεν θα δημιουργηθεί τοπική μεταβλητή num,
αλλά απλώς θα αλλάξει η καθολική μεταβλητή:
let num = 1;
function func() {
num = 2; // ξεχάσαμε να γράψουμε let - αλλάζουμε την εξωτερική μεταβλητή
console.log(num);
}
func(); // καλούμε τη συνάρτηση, θα εμφανίσει 2
console.log(num); // θα εμφανίσει 2 - η μεταβλητή άλλαξε
Εδώ μπορεί να υπάρχουν δύο καταστάσεις: ή πραγματικά
θέλαμε να αλλάξουμε την καθολική μεταβλητή (τότε
όλα είναι εντάξει), ή ξεχάσαμε το let και τυχαία
αλλάξαμε την καθολική μεταβλητή.
Η δεύτερη περίπτωση είναι ένα σφάλμα δύσκολο να εντοπιστεί,
που οδηγεί σε απρόβλεπτη συμπεριφορά του script.
Επομένως, πάντα, όταν εισάγετε μια νέα μεταβλητή, να τη δηλώνετε
μέσω του let.
Προσδιορίστε, χωρίς να εκτελέσετε τον κώδικα, τι θα εμφανιστεί στην κονσόλα:
let num = 1;
function func() {
num = 2;
}
func();
console.log(num);
Προσδιορίστε, χωρίς να εκτελέσετε τον κώδικα, τι θα εμφανιστεί στην κονσόλα:
let num = 1;
function func() {
let num = 2;
}
func();
console.log(num);