En pratique, il n'y a pas (ou peu) de différence avec l'exemple que vous avez donné, mais vous l'avez probablement simplifié à partir du code que vous regardez effectivement.
Dans un programme plus réaliste, vous aurez des portées et des rappels déclenchés et exécutés de manière asynchrone dans la boucle d'événements, et vous liez la variable à une instance spécifique dans une fermeture -- ainsi ;
(function (w){
setTimeout(function(){w.bar = 'baz';},100);
})(window);
window = window2;
Le bar est toujours défini dans la fenêtre d'origine, car c'est ce qui est lié à w
- où dans
(function (){
setTimeout(function(){window.bar = 'baz';},10);
})(window);
window = window2;
Il sera défini dans l'instance window2, car c'est ainsi que la fenêtre est liée lorsque l'exécution du code se produit finalement.
Dans cet exemple, "window" est une variable globale, mais c'est la même chose quel que soit l'étendue de la variable liée.