Υπάρχει κώδικας με μια αυτοκαλούμενη συνάρτηση (IIFE) που χρησιμοποιεί var. Τι θα εμφανιστεί στην κονσόλα όταν καλέσετε typeof a και typeof b εκτός της συνάρτησης; Πώς θα αλλάξει η συμπεριφορά σε αυστηρή λειτουργία;
sobes.tech AI
Απάντηση από AI
Αν μέσα σε μια IIFE δηλώνονται μεταβλητές με var, για παράδειγμα:
(function() {
var a = 10;
b = 20; // χωρίς var
})();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number"
Η μεταβλητή a που δηλώνεται με var μέσα στη συνάρτηση είναι τοπική και δεν προσβάσιμη από έξω, επομένως το typeof a θα επιστρέψει "undefined".
Η μεταβλητή b που δηλώνεται χωρίς var, let ή const, σε μη αυστηρή λειτουργία, οδηγεί στη δημιουργία μιας παγκόσμιας μεταβλητής. Συνεπώς, το typeof b θα επιστρέψει "number".
Σε αυστηρή λειτουργία ('use strict';), η προσπάθεια ανάθεσης σε μια μη δηλωμένη μεταβλητή (b = 20;) θα προκαλέσει σφάλμα ReferenceError, και η παγκόσμια μεταβλητή δεν θα δημιουργηθεί. Έτσι, και οι δύο μεταβλητές εκτός της συνάρτησης δεν θα είναι προσβάσιμες, και τα typeof a και typeof b θα επιστρέψουν "undefined" (ή θα ριχτεί σφάλμα πριν από αυτό).