Видимо, проблема возникает из за синтаксиса самого языка. В этом конкретном языке - видимо самое оптимальное - ближе к месту применения - как в PHP или Basic
Представь, что функция разрастается и ты выносишь куски кода в отдельные функции. Как тебе проще будет это делать?
Или ты читаешь код функции, а там портянка из объявлений (с инициализацией). Когда доходишь до кода, где используется переменная, ты уже забыл что там инициализировалось.
Имхо, главное писать перед их употреблением, чтобы на момент использования они были определены, больше никаких ограничений нет. Какая, собственно разница? Такие вопросы обычно возникают, когда код писать не умеешь, типа, чтобы было о чем языком трепать.
Меня выбешивает иногда, когда некоторые ушлепки всегда инициализируют все переменные перед их использованием. Это 100% признак того, что чел плавает в JS.
Есть одна тонкость с инициализацией не локальных переменных внутри ф-ций, а свойств объектов. Если св-во не объявлено, при использовании with, присваивание неинициализированной переменной уйдет в глобал. Но это уже другая история.
Есть, кстати, некоторые нюансы, связанные с 2-х проходной компиляцией
console.log(
(function(){
foo=1
var foo
return foo
}())
)
//1
это именно локальная foo выскочила. strict тут не помогает.
это может привести к wtf'кам, которые потом зипешся ловить, особенно в сочетании с function declaration. Поэтому, разного рода хипстерские штучки пейсать не надо.
Меня выбешивает иногда, когда некоторые ушлепки всегда инициализируют все переменные перед их использованием. Это 100% признак того, что чел плавает в JS.
И над какими же ты проектами работал вместе с ними?