Sobes.tech
Junior

Kas yra apimtis JavaScript?

sobes.tech AI

Atsakymas iš AI

JavaScript'o matymo sritis (Scope) yra kontekstas, kuriame yra apibrėžtos ir prieinamos kintamieji ir funkcijos.

Paprasčiau tariant, ji nustato, kur galima nuoroda į kintamąjį ar funkciją kode.

Yra keli matymo sričių tipai:

  • Globali matymo sritis (Global Scope): Kintamieji, deklaruoti už bet kurios funkcijos, yra globalios matymo srities dalis. Jie prieinami iš bet kurios kodo vietos.
    // Globalus kintamasis
    let globalVar = "Aš matau visur";
    
    function showGlobal() {
      console.log(globalVar); // prieinama funkcijoje
    }
    
    showGlobal();
    
  • Vietinė (funkcinė) matymo sritis (Local/Function Scope): Kintamieji, deklaruoti funkcijos viduje, yra šios funkcijos vietinėje matymo srityje. Jie prieinami tik šioje funkcijoje ir jos vidinėse funkcijose, bet ne išorėje.
    function showLocal() {
      // Vietinis kintamasis
      let localVar = "Aš matau tik čia";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // klaida: localVar nėra apibrėžtas
    
  • Blokinė matymo sritis (Block Scope): Atsirado su ES6 (ES2015) su let ir const įvedimu. Kintamieji, deklaruoti su let arba const viduje skliaustų ({}), ar tai būtų kodo blokai, ciklai ar sąlyginiai operatoriai, turi blokinę matymo sritį. Kintamieji, deklaruoti su var, neturi blokinės matymo srities.
    if (true) {
      // Blokinė matymo srities kintamasis
      let blockVar = "Aš matau tik šiame bloke";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // klaida: blockVar nėra apibrėžtas
    
    for (let i = 0; i < 2; i++) {
      // Ciklo blokinė matymo sritis
      console.log(i);
    }
    
    // console.log(i); // klaida: i nėra apibrėžtas (jei naudotas `let`)
    

Svarbu taip pat suprasti Matymo srities grandinę (Scope Chain). Kai JavaScript bando rasti kintamojo reikšmę, jis pirmiausia žiūri į esamą matymo sritį. Jei ten neranda, pereina į išorinę (tėvų) matymo sritį ir taip toliau, iki globalios matymo srities. Jei neranda net ten, išmetama klaida ReferenceError.