JavaScript : Niveau Expert

Maîtrisez les concepts avancés du langage pour des performances et une architecture optimales.

Module 1 : Under the Hood

Event Loop, Microtasks et Call Stack

Comprendre comment JavaScript gère l'asynchronisme en interne via la file d'attente des tâches et la pile d'exécution.

globalThis.console.log('1 - Synchrone');
globalThis.setTimeout(() => globalThis.console.log('2 - Macrotâche (Timer)'), 0);
globalThis.Promise.resolve().then(() => globalThis.console.log('3 - Microtâche (Promise)'));
globalThis.console.log('4 - Synchrone');

// Résultat : 1, 4, 3, 2
// Les microtâches sont toujours exécutées avant la prochaine macrotâche.
Module 2 : Prototypes & Héritage Avancé

La chaîne de prototypes et le 'this'

JavaScript utilise un héritage prototypal. Comprendre comment les objets sont liés entre eux.

const animal = {
    manger() { globalThis.console.log(`${this.nom} mange...`); }
};

const chien = globalThis.Object.create(animal);
chien.nom = "Rex";
chien.manger(); // Trouve 'manger' dans le prototype

// Pièges du 'this' : bind, call, apply
const chat = { nom: "Félix" };
animal.manger.call(chat); // Force le 'this' sur 'chat'
Module 3 : Closures & Programmation Fonctionnelle

Encapsulation et Curryfication

Les closures permettent de maintenir l'accès à des variables même après l'exécution de la fonction parente.

// Encapsulation (Données privées)
function creerCompteur() {
    let count = 0;
    return {
        increment: () => ++count,
        valeur: () => count
    };
}

// Curryfication
const multiplier = (a) => (b) => a * b;
const doubler = multiplier(2);
globalThis.console.log(doubler(5)); // 10
Module 4 : Web Components & Shadow DOM

Composants Natifs Réutilisables

Créez vos propres balises HTML sans bibliothèques externes.

class AlerteWinny extends HTMLElement {
    constructor() {
        super();
        const shadow = this.attachShadow({ mode: 'open' });
        const div = globalThis.globalThis.document.createElement('div');
        div.textContent = this.dataset.message || "Alerte !";
        div.style.padding = "10px";
        div.style.border = "1px solid red";
        shadow.appendChild(div);
    }
}
globalThis.customElements.define('alerte-winny', AlerteWinny);
Module 5 : Proxy, Reflect & Performance

Interception et Meta-programmation

L'API Proxy permet de redéfinir les opérations fondamentales (get, set, etc.) sur les objets.

const validateur = {
    set(obj, prop, value) {
        if (prop === 'age' && typeof value !== 'number') {
            throw new globalThis.TypeError("L'âge doit être un nombre");
        }
        obj[prop] = value;
        return true;
    }
};

const user = new Proxy({}, validateur);
user.age = 30; // OK

Utilisez les Web Workers pour les calculs lourds en dehors du thread principal.

Module 6 : Sécurité & Optimisations

JWT, CORS et Cryptographie

Module 7 : JS Avancé & Patterns de Conception

Aller plus loin dans l'asynchronisme et la gestion des données

1. AbortController : Annuler des requêtes

Essentiel pour éviter les fuites de mémoire et les mises à jour d'état inutiles.

const controller = new globalThis.AbortController();
const signal = controller.signal;

globalThis.globalThis.fetch('/api/data', { signal }).catch(err => {
    if (err.name === 'AbortError') { globalThis.console.log('Requête annulée'); } else { globalThis.console.error(err); }
});

// Plus tard...
controller.abort();

2. Générateurs Asynchrones

Idéal pour traiter des flux de données (streams).

async function* fetchPages(urls) {
    for (const url of urls) {
        const res = await globalThis.globalThis.fetch(url);
        yield await res.json();
    }
}

for await (const data of fetchPages(['/url1', '/url2'])) {
    globalThis.console.log(data);
}

3. WeakMap & WeakSet

Collections dont les clés sont faiblement tenues en mémoire, permettant au Garbage Collector de libérer l'espace si l'objet n'est plus utilisé ailleurs.

const cachePrivé = new globalThis.WeakMap();
class User {
    constructor(id) {
        cachePrivé.set(this, { metadata: "Secret" });
    }
}

4. Top-level Await

Utilisez await directement à la racine d'un module ES.

// Dans un module .js
const response = await globalThis.globalThis.fetch('/config.json');
export const config = await response.json();
Module 8 : Écosystème Full Stack (Node.js & React)

Au-delà du navigateur

JavaScript est désormais partout. Maîtrisez le backend avec Node.js et les interfaces modernes avec React.

Backend avec Node.js & Express

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Serveur opérationnel !');
});

app.listen(3000);

Frontend avec React

import React, { useState } from 'react';

function Compteur() {
    const [count, setCount] = useState(0);
    return (
        <button onClick={() => setCount(count + 1)}>
            Cliqué {count} fois
        </button>
    );
}
Niveau Précédent : Intermédiaire Retour au hub JS