⊗jsPmMCLb 505 of 505 menu

Библиотеке кроз затварања у JavaScript-у

Често се у JavaScript-у креирају библиотеке, које представљају скупове функција за употребу од стране других програмера.

Такве библиотеке се обично упакују у модуле кроз затварања. То се ради како би при повезивању библиотеке у спољном свету појавило што мање функција.

У принципу, свака библиотека се труди да створи у спољном свету само једну променљиву - објекат са функцијама библиотеке. Притом унутар кода библиотеке, неке функције су основне, а неке - помоћне. Очигледно је да у спољни свет желимо да извеземо само потребне функције, не затрпавајући извезени објекат помоћним функцијама.

Погледајмо на примеру. Претпоставимо да имамо следећи скуп функција које бисмо желели да претворимо у библиотеку:

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

Упакујмо наше функције у облик модула:

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

А сада извезимо све функције, осим помоћне:

;(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:

<html> <head> <script> </script> </head> </html>

Прикључимо нашу библиотеку на њу:

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

Искористимо функције из наше библиотеке:

<html> <head> <script src="math.js"></script> <script> alert(math.avg([1, 2, 3]) + math.square()); </script> </head> </html>

Дат је следећи код:

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

Оформите овај код у облик модула. Извезете напоље све функције, осим помоћне.

Проучите библиотеку underscore. Направите вашу сличну библиотеку, поновивши у њој 5-10 функција оригиналне библиотеке.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј