Mi comprensión del patrón de módulo revelador es la siguiente:
CÓDIGO #1
const iifeModulePattern = (function () { const secretSeed = 999; // ← private const logSecretCode = function(){console.log(secretSeed+1)}; return {methodForPublic : logSecretCode}; })(); iifeModulePattern.methodForPublic();Hasta ahora espero no estar equivocado. Mi pregunta es:
CÓDIGO #2
const modulePattern = () => { const secretSeed = 999; // ← private const logSecretCode = function(){console.log(secretSeed+1)}; return {methodForPublic : logSecretCode}; }; modulePattern().methodForPublic();No almacenaré códigos "secretos" (como contraseñas) de esta manera. Los códigos anteriores son solo ejemplos.
const iifeModulePattern = (function() { let value = 0; // private return { next: () => (value = 134775813 * value + 1) >>> 0 }; })(); for (let i = 0; i < 5; ++i) { console.log("iifeModulePattern.next()", i, iifeModulePattern.next()); } console.log("The basic IIFE."); console.log(""); const modulePattern = () => { let value = 0; // private return { next: () => (value = 134775813 * value + 1) >>> 0 }; }; for (let i = 0; i < 5; ++i) { console.log("modulePattern().next()", i, modulePattern().next()); } console.log("Kinda pointless this way, ain't it? Everytime, the sequence starts all over."); console.log(""); const instance1 = modulePattern(); const instance2 = modulePattern(); for (let i = 0; i < 10; ++i) { console.log("instance1.next()", i, instance1.next()); if (i & 1) { console.log("instance2.next()", i, instance2.next()); } } console.log("This usage makes more sense.\nAnd the two instances progress independant of each other."); .as-console-wrapper {top:0;max-height:100%!important}¿El siguiente Código #2 no servirá para el mismo propósito?
Si no talvez; depende de como lo uses.
Si no es así, ¿cuál es la diferencia?
iifeModulePattern es un singleton, modulePattern() es una fábrica.
Si es así, ¿por qué el código n.° 1 es más popular que el código n.° 2?
¿Cuál es el propósito de darle un nombre a la fábrica, almacenarlo en una variable si todo lo que hará es llamarlo una vez, aquí mismo, ahora mismo?