Por que minha variável permanece inalterada após modificá-la dentro de uma função? - Referência de código assíncrona

Dados os exemplos a seguir, por que é outerScopeVarindefinido em todos os casos? var outerScopeVar; var img = document.createElement('img'); img.onload = function() { outerScopeVar = this.width; }; img.src = 'lolcat.png'; alert(outerScopeVar); var outerScopeVar; setTimeout(function() {...