Middle
Explique ce qu'est le motif de modules en JavaScript et où il est utilisé.
sobes.tech IA
Réponse de l'IA
Le motif de module permet d'encapsuler le code en définissant une interface publique et privée. Cela est réalisé en créant une portée privée à l'aide d'expressions de fonction immédiatement invoquées (IIFE) ou de la syntaxe des modules ES.
Il s'applique à:
- Encapsulation : Cache la mise en œuvre interne, ne fournissant que l'API publique nécessaire.
- Prévention de la pollution de l'espace global : Les variables et fonctions restent locales au module.
- Organisation du code : Divise l'application en blocs logiques, facilitant la compréhension et la maintenance.
- Réutilisation du code : Les modules peuvent être importés et utilisés dans différentes parties de l'application.
Exemple avec utilisation de IIFE :
// Créer une portée privée
const myModule = (() => {
// Variable privée
let privateVariable = 'Je suis privé!';
// Fonction privée
const privateMethod = () => {
console.log(privateVariable);
};
// Fonction publique
const publicMethod = () => {
console.log('Ceci est une fonction publique.');
privateMethod(); // Accès à la fonction privée
};
// Retourner uniquement les membres publics
return {
publicMethod: publicMethod
};
})();
// Utilisation de l'interface publique
myModule.publicMethod(); // Affichera "Ceci est une fonction publique." et "Je suis privé!"
// myModule.privateVariable; // Erreur - inaccessible
// myModule.privateMethod(); // Erreur - inaccessible
Exemple avec utilisation de ES Modules :
// module.js
// Variable privée (non exportée)
const privateVariable = 'Je suis privé en ES Module!';
// Fonction privée (non exportée)
const privateMethod = () => {
console.log(privateVariable);
};
// Fonction publique (exportée)
export const publicMethod = () => {
console.log('Ceci est une fonction publique en ES Module.');
privateMethod();
};
// main.js
import { publicMethod } from './module.js';
publicMethod(); // Affichera "Ceci est une fonction publique en ES Module." et "Je suis privé en ES Module!"