JavaScript में Scope कैसे काम करता है और ग्लोबल स्कोप, लोकल स्कोप, और लेक्सिकल स्कोप के बीच का अंतर जानें।
Scope उस संदर्भ को संदर्भित करता है जिसमें फंक्शन्स या वेरिएबल्स एक्सेसिबल हैं। JavaScript में तीन स्कोप टाइप्स हैं: ग्लोबल स्कोप, लोकल स्कोप, लेक्सिकल स्कोप:
- एक ग्लोबल वेरिएबल एक वेरिएबल है जिसे कोड ब्लॉक के बाहर डिक्लेयर किया गया है
- एक लोकल वेरिएबल एक वेरिएबल है जिसे कोड ब्लॉक के अंदर डिक्लेयर किया गया है
जानना अच्छा है: फंक्शन्स उन वेरिएबल्स और अन्य फंक्शन्स को एक्सेस कर सकते हैं जो उनके बाहर सेट हैं — लेकिन उन वेरिएबल्स को नहीं जो अंदर अन्य फंक्शन्स में सेट हैं।
यह एक मिनट में समझ आ जाएगा।
ग्लोबल स्कोप
ग्लोबल स्कोप में कोई भी वेरिएबल या फंक्शन अन्य फंक्शन्स के अंदर एक्सेसिबल है:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// dogBreed एक्सेसिबल है क्योंकि यह ग्लोबल स्कोप में है
console.log(dogBreed) // "Labrador"
}
// फंक्शन चलाएं
getDogBreed()
इसमें फंक्शन्स के अंदर फंक्शन्स शामिल हैं:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// फंक्शन के अंदर फंक्शन
let getDogBreedFromGlobalScope = function() {
// ग्लोबल स्कोप से dogBreed एक्सेस करता है
console.log(dogBreed) // "Labrador"
}
// फंक्शन चलाएं
getDogBreedFromGlobalScope()
}
// फंक्शन चलाएं
getDogBreed()
लोकल स्कोप
लोकल स्कोप वाला वेरिएबल या फंक्शन केवल अपने स्वयं के संदर्भ (स्कोप) से एक्सेसिबल होता है:
let getDogBreed = function() {
// लोकल वेरिएबल स्कोप
let dogBreed = "Labrador"
// हम dogBreed वेरिएबल को एक्सेस कर सकते हैं क्योंकि यह लोकल है
console.log(dogBreed) // "Labrador
}
वेरिएबल dogBreed का लोकल स्कोप है, और इसे केवल इसके स्कोप (कर्ली ब्रेसेस { .. } के अंदर) से एक्सेस किया जा सकता है।
यहां वही कोड है, लेकिन इस बार हम console.log(dogBreed) को लोकल स्कोप के बाहर ले जाते हैं, इसलिए अब यह ग्लोबल स्कोप में है:
let getDogBreed = function() {
// लोकल वेरिएबल स्कोप
let dogBreed = "Labrador"
}
// लोकली स्कोप्ड वेरिएबल को एक्सेस करने का प्रयास
console.log(dogBreed) // Uncaught ReferenceError: dogBreed is not defined
आपको एक रेफरेंस एरर मिलता है, जो कहता है "dog breed is not defined", क्योंकि आप ग्लोबल स्कोप से लोकली स्कोप्ड वेरिएबल को लॉग आउट करने का प्रयास कर रहे हैं।
लेक्सिकल स्कोप
जब आप नेस्ट फंक्शन्स (फंक्शन्स के अंदर फंक्शन्स डालते हैं), तो पैरेंट फंक्शन (सबसे बाहरी फंक्शन) के भीतर के वेरिएबल्स और फंक्शन्स को इनर फंक्शन्स द्वारा एक्सेस किया जा सकता है। इसे लेक्सिकल स्कोप कहा जाता है।
हालांकि, पैरेंट (सबसे बाहरी) फंक्शन स्वयं, इनर फंक्शन्स के भीतर के वेरिएबल्स या फंक्शन्स को एक्सेस नहीं कर सकता। यह सुनने में जितना भ्रमित लगता है उतना है नहीं, आइए एक उदाहरण देखें, तब समझ आ जाएगा:
// Global scope
let animals = function() {
// Lexical scope
let dogBreed = "Labrador"
// नेस्टेड फंक्शन
let getAnimals = function() {
// हम dogBreed को एक्सेस कर सकते हैं क्योंकि यह लेक्सिकल स्कोप में है
console.log(dogBreed) // "Labrador"
// यहां एक लोकली स्कोप्ड वेरिएबल है
let catBreed = "Persian"
console.log(catBreed) // "Persian"
}
// फंक्शन चलाएं
getAnimals()
// यह काम करता है क्योंकि dogBreed वेरिएबल लेक्सिकल स्कोप में है
console.log(dogBreed) // "Labrador"
// यह काम नहीं करेगा, क्योंकि catBreed लेक्सिकल स्कोप में नहीं है, यह getAnimals() फंक्शन के लिए लोकल है
console.log(catBreed) // Uncaught ReferenceError: catBreed is not defined
}
animals()