⊗jsPmMCLb 505 of 505 menu

Bibliotecas mediante clausuras en JavaScript

A menudo en JavaScript se crean bibliotecas, que son conjuntos de funciones para ser utilizados por otros programadores.

Estas bibliotecas generalmente se encapsulan en módulos mediante clausuras. Esto se hace para que al conectar la biblioteca en el mundo exterior aparezcan la menor cantidad de funciones posible.

Por lo general, cada biblioteca intenta crear en el mundo exterior solo una variable: un objeto con las funciones de la biblioteca. Al mismo tiempo, dentro del código de la biblioteca, algunas funciones son principales y otras son auxiliares. Obviamente, queremos exportar al mundo exterior solo las funciones necesarias, sin saturar el objeto exportado con funciones auxiliares.

Veamos un ejemplo. Supongamos que tenemos el siguiente conjunto de funciones que nos gustaría convertir en una biblioteca:

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('')); } // función auxiliar function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; }

Empaquetemos nuestras funciones en un módulo:

;(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('')); } // función auxiliar function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; } })();

Y ahora exportemos todas las funciones, excepto la auxiliar:

;(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('')); } // función auxiliar function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; } window.math = {square, cube, avg, digitsSum}; })();

Supongamos que tenemos una página HTML index.html:

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

Conectemos nuestra biblioteca a ella:

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

Utilicemos las funciones de nuestra biblioteca:

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

Se da el siguiente código:

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; } // función auxiliar function sum(arr, pow) { let res = 0; for (let elem of arr) { res += elem ** pow; } return res; }

Empaquete este código en un módulo. Exporte al exterior todas las funciones, excepto la auxiliar.

Estudie la biblioteca underscore. Cree su propia biblioteca similar, reproduciendo en ella 5-10 funciones de la biblioteca original.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar