Sobes.tech
Junior

Kas ir piekļuves joma JavaScript?

sobes.tech AI

Atbilde no AI

JavaScript skatījuma (Scope) ir konteksts, kurā ir definētas un pieejamas mainīgie un funkcijas.

Vienkāršāk sakot, tas nosaka, kur var atsaukties uz mainīgo vai funkciju kodā.

Ir vairāki skatījuma veidi:

  • Globālais skatījums (Global Scope): Mainīgie, kas ir deklarēti ārpus jebkuras funkcijas, atrodas globālajā skatījumā. Tie ir pieejami no jebkuras vietas kodā.
    // Globālais mainīgais
    let globalVar = "Es redzams visur";
    
    function showGlobal() {
      console.log(globalVar); // pieejams funkcijā
    }
    
    showGlobal();
    
  • Lokālais (funkcijas) skatījums (Local/Function Scope): Mainīgie, kas ir deklarēti funkcijas iekšienē, ir šīs funkcijas lokālajā skatījumā. Tie ir pieejami tikai šajā funkcijā un tās iekšējās funkcijās, bet ne ārpus tām.
    function showLocal() {
      // Lokālais mainīgais
      let localVar = "Es redzams tikai šeit";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // kļūda: localVar nav definēts
    
  • Bloka skatījums (Block Scope): Parādījās ar ES6 (ES2015) ar let un const ieviešanu. Mainīgie, kas ir deklarēti ar let vai const iekavās ({}), vai tas būtu koda bloks, cikls vai nosacījuma operators, tiem ir bloka skatījums. Mainīgie, kas ir deklarēti ar var, tiem nav bloka skatījuma.
    if (true) {
      // Bloka skatījuma mainīgais
      let blockVar = "Es redzams tikai šajā blokā";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // kļūda: blockVar nav definēts
    
    for (let i = 0; i < 2; i++) {
      // Cikla bloka skatījums
      console.log(i);
    }
    
    // console.log(i); // kļūda: i nav definēts (ja izmantots `let`)
    

Ir arī svarīgi saprast Skatījuma ķēdes (Scope Chain) jēdzienu. Kad JavaScript mēģina atrast mainīgā vērtību, tas vispirms skatās pašreizējā skatījumā. Ja tur nav atrasts, tas pāriet uz ārējo (vecāku) skatījumu un tā tālāk, līdz globālajam skatījumam. Ja arī tur nav atrasts, tiek iemesta kļūda ReferenceError.