Помогите пожалуйста понять почему следующий код выводит undefined, а не 5
Выводит где? Как вы этот код запускали? Раз уж вы решили скрыть эту информацию...
Ответ номер раз: а чо вы врёте-то? Открываем консоль, копируем код, запускаем и видим, что выводится 5.
Ответ номер два: jsfiddle, например, по умолчанию оборачивает код в window.onload, соответственно, переменная b в window не попадёт - потому и undefined. (UPD. Исправили эту дичь).