जावास्क्रिप्ट में ग्लोबल काउंटर वेरिएबल
चलिए वेरिएबल num को फ़ंक्शन के बाहर ले जाते हैं,
जिससे यह ग्लोबल बन जाएगी:
let num = 1; // ग्लोबल वेरिएबल
function test() {
return function() {
console.log(num);
num++;
};
}
इस स्थिति में सभी रिटर्न की गई फ़ंक्शन इसी ग्लोबल वेरिएबल को बदल देंगी और काउंटर एक-दूसरे पर निर्भर होकर काम करेंगे:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // पहला काउंटर
func1(); // 1 प्रिंट करेगा
func1(); // 2 प्रिंट करेगा
let func2 = test(); // दूसरा काउंटर
func2(); // 3 प्रिंट करेगा
func2(); // 4 प्रिंट करेगा
हमारा पिछला कोड स्वतंत्र काउंटर क्यों बना रहा था? इस कोड को याद करें:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
बात यह है कि वेरिएबल num - फ़ंक्शन test के अंदर
लोकल है। इसलिए test का हर बार कॉल होना अपनी एक लोकल
वेरिएबल बनाता है।
इसलिए रिटर्न की गई फ़ंक्शन test फ़ंक्शन की अपनी-अपनी
लोकल वेरिएबल को रेफर करेंगी। इसी तरह से स्वतंत्रता प्राप्त होती है।
अगर num को ग्लोबल वेरिएबल बना दिया जाए - यह भी एक क्लोजर
होगा। बस रिटर्न की गई फ़ंक्शन के लेक्सिकल एन्वायरनमेंट एक ही
वेरिएबल num को रेफर करते हैं - इस वेरिएबल में कोई भी
बदलाव सभी फ़ंक्शन में दिखाई देगा।
बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test()();
let func1 = func;
let func2 = func;
func1();
func2();
func1();
func2();
बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test();
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();