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