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