Sobes.tech
Junior

Ce este domeniul în JavaScript?

sobes.tech AI

Răspuns de la AI

Domeniul de vizibilitate (Scope) în JavaScript este contextul în care sunt definite și accesibile variabilele și funcțiile.

Pe scurt, acesta determină unde în cod se poate face referire la o variabilă sau funcție.

Există mai multe tipuri de domenii de vizibilitate:

  • Domeniu global (Global Scope): Variabilele declarate în afara oricărei funcții se află în domeniul global. Ele sunt accesibile din orice loc din cod.
    // Variabilă globală
    let globalVar = "Sunt vizibil peste tot";
    
    function showGlobal() {
      console.log(globalVar); // Disponibil în funcție
    }
    
    showGlobal();
    
  • Domeniu local (Local/Function Scope): Variabilele declarate în interiorul unei funcții se află în domeniul local al acesteia. Sunt accesibile doar în acea funcție și în funcțiile încorporate, dar nu și în exterior.
    function showLocal() {
      // Variabilă locală
      let localVar = "Văd doar aici";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Eroare: localVar nu este definit
    
  • Domeniu de bloc (Block Scope): Introduse în ES6 (ES2015) cu let și const. Variabilele declarate cu let sau const în interiorul acoladelor ({}), cum ar fi în blocuri de cod, bucle sau condiții, au domeniu de bloc. Variabilele declarate cu var nu au domeniu de bloc.
    if (true) {
      // Variabilă cu domeniu de bloc
      let blockVar = "Vizibil doar în acest bloc";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Eroare: blockVar nu este definit
    
    for (let i = 0; i < 2; i++) {
      // Variabilă cu domeniu de bloc în buclă
      console.log(i);
    }
    
    // console.log(i); // Eroare: i nu este definit (dacă s-a folosit let)
    

Este, de asemenea, important să înțelegem conceptul de lanț de scope (Scope Chain). Când JavaScript încearcă să găsească valoarea unei variabile, verifică mai întâi în domeniul curent. Dacă nu o găsește, trece la domeniul exterior (părinte) și tot așa, până ajunge la domeniul global. Dacă variabila nu este găsită nici acolo, se aruncă o eroare ReferenceError.