Sobes.tech
Junior

Ի՞նչ է տեսադաշտը JavaScript-ում։

sobes.tech AI

Պատասխան AI-ից

JavaScript- ում տեսադաշտը (Scope) այն կոնտեքստն է, որտեղ սահմանված և հասանելի են փոփոխականներն ու ֆունկցիաները:

Հեշտ ասած, այն որոշում է, թե որտեղ կարելի է հղում կատարել փոփոխականին կամ ֆունկցիային կոդում:

Կան մի քանի տեսադաշտի տեսակներ:

  • Գլոբալ տեսադաշտ (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 սխալ: