Zárásokkal készített könyvtárak JavaScriptben

Gyakran készítenek könyvtárakat JavaScriptben, amelyek más programozók által használható függvénygyűjtemények.

Az ilyen könyvtárakat általában zárásokkal becsomagolják modulokká. Ez azért történik, hogy a könyvtár csatolásakor a külső világban oly kevés függvény jelenjen meg, amennyire csak lehetséges.

Általában minden könyvtár arra törekszik, hogy a külső világban csak egy változót hozzon létre - a könyvtár függvényeit tartalmazó objektumot. Eközben a könyvtár kódján belül egyes függvények alapvetőek, mások - kisegítőek. Nyilvánvaló, hogy a külső világba csak a szükséges függvényeket akarjuk exportálni, anélkül, hogy az exportált objektumot feltölnénk kisegítő függvényekkel.

Nézzünk egy példát. Tegyük fel, hogy rendelkezünk a következő függvénygyűjteménnyel, amit könyvtárrá szeretnénk alakítani:

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(''));
}

// kisegítő függvény
function sum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

Alakítsuk függvényeinket modullá:

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(''));
  }
  
  // kisegítő függvény
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
})();

És most exportáljunk minden függvényt, kivéve a kisegítőt:

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(''));
  }
  
  // kisegítő függvény
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
  
  window.math = {square, cube, avg, digitsSum};
})();

Tegyük fel, hogy van egy index.html HTML oldalunk:

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

Csatoljuk hozzá a könyvtárunkat:

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

Használjuk a könyvtárunk függvényeit:

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

Adott a következő kód:

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;
}

// kisegítő függvény
function sum(arr, pow) {
  let res = 0;
  
  for (let elem of arr) {
    res += elem ** pow;
  }
  
  return res;
}

Alakítsa ezt a kódot modullá. Exportálja kifelé az összes függvényt, kivéve a kisegítőt.

Задание 2

Tanulmányozza a underscore könyvtárat. Készítsen saját, ehhez hasonló könyvtárat, ismételve benne az eredeti könyvtár 5-10 függvényét.