जावास्क्रिप्ट में स्कोप कैसे काम करता है और ग्लोबल स्कोप, लोकल स्कोप और लेक्सिकल स्कोप के बीच अंतर के बारे में जानें।
दायरा उस संदर्भ को संदर्भित करता है जिसमें फ़ंक्शन या चर पहुंच योग्य होते हैं। जावास्क्रिप्ट के तीन स्कोप टाइप हैं, ग्लोबल स्कोप, लोकल स्कोप, लेक्सिकल स्कोप:
- एक वैश्विक चर एक कोड ब्लॉक के बाहर घोषित एक चर है
- एक स्थानीय चर एक कोड ब्लॉक के अंदर घोषित एक चर है
जानना अच्छा है: फ़ंक्शंस चर और अन्य फ़ंक्शंस तक पहुँच सकते हैं जो बाहर सेट किए गए हैं स्वयं — लेकिन वेरिएबल नहीं जो अंदर . सेट किए गए हैं अन्य कार्य।
यह एक मिनट में समझ में आ जाएगा।
वैश्विक दायरा
वैश्विक दायरे में कोई भी चर या कार्य अन्य कार्यों के अंदर पहुंच योग्य है:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// dogBreed is accessible because it’s in the global scope
console.log(dogBreed)
// "Labrador"
}
// Run function
getDogBreed()
इसमें कार्यों के अंदर के कार्य शामिल हैं:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// function inside function
let getDogBreedFromGlobalScope = function() {
// accesses dogBreed from the global scope
console.log(dogBreed)
// "Labrador"
}
// Run function
getDogBreedFromGlobalScope()
}
// Run function
getDogBreed()
स्थानीय दायरा
स्थानीय दायरे के साथ एक चर या कार्य केवल अपने स्वयं के संदर्भ (दायरे) के भीतर से पहुंच योग्य है:
let getDogBreed = function() {
// local variable scope
let dogBreed = "Labrador"
// We can access the dogBreed variable because it’s local
console.log(dogBreed)
// "Labrador
}
चर dogBreed
इसका एक स्थानीय दायरा है, और इसे केवल इसके दायरे से ही पहुँचा जा सकता है (घुंघराले ब्रेसिज़ के अंदर{ .. }
)
यहाँ ऊपर जैसा ही कोड है, लेकिन इस बार हम console.log(dogBreed)
को स्थानांतरित करते हैं स्थानीय दायरे से बाहर, इसलिए अब यह वैश्विक दायरे में है:
let getDogBreed = function() {
// local variable scope
let dogBreed = "Labrador"
}
// Try to access a locally scoped variable
console.log(dogBreed)
// Uncaught ReferenceError: dogBreed is not defined
आपको एक संदर्भ त्रुटि मिलती है, जो कहती है कि “dog breed is not defined”
, क्योंकि आप वैश्विक दायरे से स्थानीय रूप से दायरे वाले चर को लॉग आउट करने का प्रयास कर रहे हैं।
लेक्सिकल स्कोप
जब आप घोंसला फ़ंक्शंस (फ़ंक्शंस के भीतर फ़ंक्शन डालें), मूल फ़ंक्शन (सबसे बाहरी फ़ंक्शन) के भीतर चर और फ़ंक्शंस को आंतरिक फ़ंक्शंस द्वारा एक्सेस किया जा सकता है। इसे लेक्सिकल स्कोप कहा जाता है।
हालाँकि, माता-पिता (सबसे बाहरी) स्वयं कार्य करते हैं, आंतरिक कार्यों के भीतर चर या कार्यों तक नहीं पहुँच सकते हैं। यह जितना लगता है उससे कहीं अधिक भ्रमित करने वाला लग सकता है, आइए एक उदाहरण देखें, फिर यह समझ में आएगा:
// Global scope
let animals = function() {
// Lexical scope
let dogBreed = "Labrador"
// Nested function
let getAnimals = function() {
// We can access dogBreed because it's in the lexical scope
console.log(dogBreed)
// "Labrador"
// Here’s a locally scoped variable
let catBreed = "Persian"
console.log(catBreed)
// "Persian"
}
// Run function
getAnimals()
// This works because the dogBreed variable is in the lexical scope
console.log(dogBreed)
// "Labrador"
// This won’t work, because catBreed is not in the lexical scope, it’s local to the getAnimals() function
console.log(catBreed)
// Uncaught ReferenceError: catBreed is not defined
}
animals()