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 ката чыгат.