nverv, чувак, никто тебе не запрещает писать
this.foo = ...
Более того это типичный пример "портируемого" кода для разных окружений, т.к.:
браузер - глобальный объект
поток - глобальный объект
node - exports
***
Плохо когда пишут:
foo =
т.к. такое поведение было убрано из стандарта - хорошо это или плохо другой вопрос, но на мой взгляд они сделали всё правильно, т.к. подход к переменным в JS изначально был неверный и в ECMAScript6 это исправили (добавили let и const).
Кого раздражает синтаксическая многословность, то посмотрите в сторону CoffeeScript и прочих транслируемых в JS языков.
***
В новый стандарт JS добавили нативные модули, и при их использовании var будет добавлять не в global space, а в контекст модуля (как в ноде) и тут уже очевидная разница.
JS эволюционирует, т.к. меняются его задачи и сферы применения, так например появятся типы, структуры, уже появились "настоящие" массивы и возможность ручного управления памятью и ещё куча всего. От того, что кому то кажется сложным мир не изменится и это сугубо твои проблемы. Не хочешь учиться - иди работать в макдональдс.