Sobes.tech
Junior

Τι είναι η εμβέλεια στην JavaScript;

sobes.tech AI

Απάντηση από AI

Η περιοχή ορατότητας (Scope) στην JavaScript είναι το πλαίσιο στο οποίο ορίζονται και είναι διαθέσιμες οι μεταβλητές και οι συναρτήσεις.

Με απλά λόγια, καθορίζει πού στον κώδικα μπορεί να αναφερθεί μια μεταβλητή ή μια συνάρτηση.

Υπάρχουν διάφοροι τύποι περιοχών ορατότητας:

  • Παγκόσμια περιοχή (Global Scope): Οι μεταβλητές που δηλώνονται εκτός οποιασδήποτε συνάρτησης βρίσκονται στην παγκόσμια περιοχή. Είναι προσβάσιμες από οπουδήποτε στον κώδικα.
    // Παγκόσμια μεταβλητή
    let globalVar = "Ορατή παντού";
    
    function showGlobal() {
      console.log(globalVar); // Διαθέσιμη μέσα στη συνάρτηση
    }
    
    showGlobal();
    
  • Τοπική (Λειτουργική) περιοχή (Local/Function Scope): Οι μεταβλητές που δηλώνονται μέσα σε μια συνάρτηση βρίσκονται στην τοπική περιοχή αυτής της συνάρτησης. Είναι προσβάσιμες μόνο μέσα σε αυτήν και στις εσωτερικές συναρτήσεις, αλλά όχι έξω από αυτήν.
    function showLocal() {
      // Τοπική μεταβλητή
      let localVar = "Βλέπω μόνο εδώ";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Σφάλμα: η localVar δεν ορίζεται
    
  • Περιοχή μπλοκ (Block Scope): Εισήχθη στο ES6 (ES2015) με let και const. Οι μεταβλητές που δηλώνονται με let ή const μέσα σε αγκύλες ({}), όπως σε μπλοκ κώδικα, βρόχους ή συνθήκες, έχουν περιορισμό μπλοκ. Οι μεταβλητές που δηλώνονται με var δεν έχουν περιορισμό μπλοκ.
    if (true) {
      // Μεταβλητή με περιορισμό μπλοκ
      let blockVar = "Ορατή μόνο σε αυτό το μπλοκ";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Σφάλμα: η blockVar δεν ορίζεται
    
    for (let i = 0; i < 2; i++) {
      // Μεταβλητή με περιορισμό μπλοκ στον βρόχο
      console.log(i);
    }
    
    // console.log(i); // Σφάλμα: η i δεν ορίζεται (αν χρησιμοποιήθηκε let)
    

Είναι επίσης σημαντικό να κατανοήσουμε τη έννοια της αλυσίδας περιοχών (Scope Chain). Όταν η JavaScript προσπαθεί να βρει την τιμή μιας μεταβλητής, αρχικά ελέγχει στην τρέχουσα περιοχή. Αν δεν τη βρει, προχωρά στην εξωτερική (γονική) περιοχή και συνεχίζει, μέχρι να φτάσει στην παγκόσμια περιοχή. Αν η μεταβλητή δεν βρεθεί πουθενά, προκαλείται σφάλμα ReferenceError.