जावास्क्रिप्ट में ग्लोबल काउंटर वेरिएबल

चलिए वेरिएबल num को फ़ंक्शन के बाहर ले जाते हैं, जिससे यह ग्लोबल बन जाएगी:

javascriptlet num = 1; // ग्लोबल वेरिएबल

function test() {
  return function() {
    console.log(num);
    num++;
  };
}

इस स्थिति में सभी रिटर्न की गई फ़ंक्शन इसी ग्लोबल वेरिएबल को बदल देंगी और काउंटर एक-दूसरे पर निर्भर होकर काम करेंगे:

javascriptlet num = 1;

function test() {
  return function() {
    console.log(num);
    num++;
  };
}

let func1 = test(); // पहला काउंटर
func1();  // 1 प्रिंट करेगा
func1();  // 2 प्रिंट करेगा

let func2 = test(); // दूसरा काउंटर
func2();  // 3 प्रिंट करेगा
func2();  // 4 प्रिंट करेगा

हमारा पिछला कोड स्वतंत्र काउंटर क्यों बना रहा था? इस कोड को याद करें:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  };
};

बात यह है कि वेरिएबल num - फ़ंक्शन test के अंदर लोकल है। इसलिए test का हर बार कॉल होना अपनी एक लोकल वेरिएबल बनाता है।

इसलिए रिटर्न की गई फ़ंक्शन test फ़ंक्शन की अपनी-अपनी लोकल वेरिएबल को रेफर करेंगी। इसी तरह से स्वतंत्रता प्राप्त होती है।

अगर num को ग्लोबल वेरिएबल बना दिया जाए - यह भी एक क्लोजर होगा। बस रिटर्न की गई फ़ंक्शन के लेक्सिकल एन्वायरनमेंट एक ही वेरिएबल num को रेफर करते हैं - इस वेरिएबल में कोई भी बदलाव सभी फ़ंक्शन में दिखाई देगा।

Задание 1

बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:

javascriptlet counter = 0;
    
function test() {
  return function() {
    console.log(counter);
    counter++;
  };
}

let func = test;

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Задание 2

बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:

javascriptfunction 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();
Задание 3

बिना कोड रन किए, बताएं कि कंसोल में क्या प्रिंट होगा:

javascriptfunction 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();