JavaScript में फ़ंक्शनों के लेक्सिकल वातावरण का अनुप्रयोग
मान लीजिए कि हमारे पास एक फ़ंक्शन है, जो अपने परिणाम के रूप में दूसरा फ़ंक्शन वापस करता है:
function test() {
return function() {
}
}
यदि पैरेंट फ़ंक्शन में कोई वेरिएबल हैं, तो ये वेरिएबल रिटर्न किए गए फ़ंक्शन के लेक्सिकल वातावरण में शामिल होंगे:
function test() {
let num = 1; // पैरेंट फ़ंक्शन का वेरिएबल
return function() {
// लेक्सिकल वातावरण = {num: 1}
}
}
आइए हमारे रिटर्न किए गए फ़ंक्शन के कोड में
console.log लिखें, जो वेरिएबल
num का मान प्रिंट करेगा:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
आइए अब पैरेंट फ़ंक्शन
test को कॉल करें
और इसके काम के परिणाम को
वेरिएबल func में लिखें:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
वेरिएबल func में रिटर्न किया गया
फ़ंक्शन लिखा जाएगा। आइए हमारे फ़ंक्शन को कॉल करें - इसके
परिणाम के रूप में यह वेरिएबल
num की सामग्री को प्रिंट करेगा:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1 प्रिंट करेगा
यदि वेरिएबल
num को फ़ंक्शन के बाहर प्रिंट करने का प्रयास करें -
तो यह अनुपलब्ध होगी:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // वेरिएबल num यहाँ अनुपलब्ध है
जैसा कि आप देख रहे हैं, लोकल वेरिएबल num
हमारे फ़ंक्शन के लेक्सिकल वातावरण से बंध गई है
और अnow, कोड में कहीं भी इस फ़ंक्शन को
कॉल करके, हम वेरिएबल num का मान
प्राप्त कर सकते हैं, भले ही कॉल करने की जगह पर
यह वेरिएबल स्वयं अनुपलब्ध हो।
वास्तव में, वेरिएबल num को ग्लोबल बनाकर
समान परिणाम प्राप्त किए जा सकते हैं:
function test() {
return function() {
console.log(num);
}
}
let num = 1; // ग्लोबल वेरिएबल
let func = test();
func(); // 1 प्रिंट करेगा
हालाँकि, यहाँ एक महत्वपूर्ण अंतर होगा:
नए वेरिएंट में वेरिएबल num को
फ़ंक्शन के बाहर बदला जा सकता है (क्योंकि यह ग्लोबल है),
जबकि पुराने वेरिएंट में - नहीं।
कोड चलाए बिना निर्धारित करें कि कंसोल में क्या प्रिंट होगा:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
कोड चलाए बिना निर्धारित करें कि कंसोल में क्या प्रिंट होगा:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
कोड चलाए बिना निर्धारित करें कि कंसोल में क्या प्रिंट होगा:
function test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
कोड चलाए बिना निर्धारित करें कि कंसोल में क्या प्रिंट होगा:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());