Ничего не никуда передаётся, это называется замыканием, скрытое свойство [[scope]] внутренней функции указывает на лексическую область видимости внешней функции (оно закрепляется в месте рождения функции), следовательно не найдя нужную переменную в своей лексической области видимости, она опирается на свой [[scope]]. console.log(a) - внутренней функции выведет 5