जावास्क्रिप्ट में क्लोजर के माध्यम से लाइब्रेरी

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

ऐसी लाइब्रेरी आमतौर पर क्लोजर के माध्यम से मॉड्यूल में लपेटी जाती हैं। यह इसलिए किया जाता है ताकि लाइब्रेरी को जोड़ने पर बाहरी दुनिया में यथासंभव कम फ़ंक्शन दिखाई दें।

एक नियम के रूप में, प्रत्येक लाइब्रेरी केवल एक चर बनाने का प्रयास करती है - लाइब्रेरी के फ़ंक्शन वाली एक वस्तु। साथ ही, लाइब्रेरी के कोड के अंदर कुछ फ़ंक्शन मुख्य होते हैं, और कुछ - सहायक। जाहिर है, हम बाहरी दुनिया में केवल आवश्यक फ़ंक्शन को ही निर्यात करना चाहते हैं, न कि निर्यात की गई वस्तु को सहायक फ़ंक्शन से अव्यवस्थित करना चाहते हैं।

आइए एक उदाहरण देखें। मान लीजिए कि हमारे पास फ़ंक्शन का निम्नलिखित सेट है, जिसे हम एक लाइब्रेरी में बदलना चाहेंगे:

math.jsfunction square(num) {
  return num ** 2;
}
function cube(num) {
  return num ** 3;
}
function avg(arr) {
  return sum(arr, 1) / arr.length;
}
function digitsSum(num) {
  return sum(String(num).split(''));
}

// सहायक फ़ंक्शन
function sum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

आइए हमारे फ़ंक्शन को एक मॉड्यूल के रूप में व्यवस्थित करें:

math.js;(function() {
  function square(num) {
    return num ** 2;
  }
  function cube(num) {
    return num ** 3;
  }
  function avg(arr) {
    return sum(arr, 1) / arr.length;
  }
  function digitsSum(num) {
    return sum(String(num).split(''));
  }
  
  // सहायक फ़ंक्शन
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
})();

और अब सहायक फ़ंक्शन को छोड़कर सभी फ़ंक्शन को निर्यात करें:

math.js;(function() {
  function square(num) {
    return num ** 2;
  }
  function cube(num) {
    return num ** 3;
  }
  function avg(arr) {
    return sum(arr, 1) / arr.length;
  }
  function digitsSum(num) {
    return sum(String(num).split(''));
  }
  
  // सहायक फ़ंक्शन
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
  
  window.math = {square, cube, avg, digitsSum};
})();

मान लीजिए कि हमारे पास HTML पृष्ठ index.html है:

index.html<html>
  <head>
    <script>
      
    </script>
  </head>
</html>

आइए इसमें हमारी लाइब्रेरी जोड़ें:

index.html<html>
  <head>
    <script src="math.js"></script>
    <script>
      
    </script>
  </head>
</html>

आइए हमारी लाइब्रेरी से फ़ंक्शन का उपयोग करें:

index.html<html>
  <head>
    <script src="math.js"></script>
    <script>
      alert(math.avg([1, 2, 3]) + math.square());
    </script>
  </head>
</html>
Задание 1

निम्नलिखित कोड दिया गया है:

javascriptfunction avg1(arr) {
  return sum(arr, 1) / arr.length;
}

function avg2(arr) {
  return sum(arr, 2) / arr.length;
}

function avg3(arr) {
  return sum(arr, 3) / arr.length;
}

// सहायक फ़ंक्शन
function sum(arr, pow) {
  let res = 0;
  
  for (let elem of arr) {
    res += elem ** pow;
  }
  
  return res;
}

इस कोड को एक मॉड्यूल के रूप में व्यवस्थित करें। सहायक फ़ंक्शन को छोड़कर बाहरी दुनिया में सभी फ़ंक्शन निर्यात करें।

Задание 2

अंडरस्कोर लाइब्रेरी का अध्ययन करें। मूल लाइब्रेरी के 5-10 फ़ंक्शन को दोहराकर इसी तरह की अपनी लाइब्रेरी बनाएं।