Ich brauche Closures nicht, aber sie interessieren mich trotzdem. Meine Antwort könnte also auch daneben liegen, dann bitte ich um Korrektur.
Die (namenlose) Funktion die alert aufruft, läuft unabhängig von initAlert. Wenn die Message ausgegeben wird, ist initAlert längst beendet und die Variable msg ist damit auch wieder weg. Diese Variable muss also für die spätere Ausführung der namenlosen Funktion konserviert werden.
Im zweiten Beispiel ist diese Variable Teil der namenlosen Funktion. Zur Ausführung der namenlosen Funktion muss die Variable also nicht erst aus dem Geltungsbereich der äußeren Funktion "umgelagert" werden.
Ich vermute nun, die Konservierung dieser Variable für den späteren Zeitpunkt kostet den erwähnten Mehraufwand.
Ob das allerdings wirklich so erheblich ist und in der Praxis tatsächlich ein Problem wird?