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