Aufzählungen in TypeScript: Was macht der JavaScript-Code?

Das folgende TypeScript:

enum PrimaryColors { Red, Green, Blue };

Erzeugt folgendes JavaScript:

var PrimaryColors;
(function (PrimaryColors) {
    PrimaryColors[PrimaryColors["Red"] = 0] = "Red";
    PrimaryColors[PrimaryColors["Green"] = 1] = "Green";
    PrimaryColors[PrimaryColors["Blue"] = 2] = "Blue";
})(PrimaryColors || (PrimaryColors = {}));
;

Es ist mir peinlich zuzugeben, dass ich nicht verstehe, was das JavaScript tut.
Die Funktion in Klammern weist Zeichenfolgenwerte zu, wobei eine andere Zuordnung als Index / Schlüssel verwendet wird. Ich habe so etwas noch nie gesehen.
Und wozu dienen die (PrimaryColors || (PrimaryColors = {}) nach der Funktion?
Wenn die Antwort darauf ist, JavaScript richtig zu lernen, werde ich es ohne weiteres akzeptieren, vorausgesetzt, es wird eine empfohlene Quelle geliefert, die klar erklärt, was ich hier sehe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage