Выносить ли переменные в начало кода?
Ответ для глобальных и локальных - да. Переменные, которые используются внутри функции, желательно описывать вначале функции. Как и пропсы для классов (пока только в последних стандартах). 
Это делается для того, чтобы сразу понимать, какие переменные используются в функции. Временные переменные можно не выносить.
Если прямо в одном участке кода, то и объявлять их лучше в нем, если хотя бы есть потенциал что будут использоваться где-то еще, то можно и наверх.
С опытом рука сама набьется и будете ставить там где надо.