Любая программа в основном обрабатывается компьютером в три этапа:
синтаксический, где источник был прочитан и преобразуется в AST. Если это невозможно, вы получите синтаксическую ошибку.
компиляция, преобразование AST в исполняемое представление (машинный код, байт-код и т. Д.). При ошибке вы получаете ошибку компиляции.
работает, возможно, получая некоторые ошибки во время выполнения.
языки «Static», как C++ или Java предназначены для повышения, как много ошибок, как это возможно на этапе 2. Программисты любят, что: каждый исправлена ошибка компилятора означает меньше отладки позже.
Языки «Scripting», такие как Javascript, обычно не создают никаких ошибок времени компиляции. Каждая ошибка, которую вы получаете, - это либо синтаксис, либо ошибка времени выполнения. Поскольку объявления переменных обрабатываются компилятором, а не во время выполнения, было бы бессмысленно добавлять целый новый класс ошибок только для этого конкретного случая.
-C++ тег, потому что это не вопрос на C++. То же самое происходит в Java или C#. –
* «Каков был мотив принятия этого дизайнерского решения?» * Этот вопрос не может быть полезен, кроме как Бренданом Эйхом или кем-то, цитирующим что-то (с достоверной, проверяемой ссылкой), где Брендан Эйч объяснил, почему он это сделал. [Соответствующая часть спецификации] (http://www.ecma-international.org/ecma-262/5.1/#sec-10.5) ясно, что поведение определено, но не объясняет мотив. Мы все можем * спекулировать *, но спекуляция - это не то, для чего SO. –
Кто знает почему? Все веб-технологии чрезмерно толерантны, потому что они должны справляться с большим количеством плохого программного обеспечения и глупых разработчиков. У вас также может быть два
s в вашем HTML. Ни один браузер не будет жаловаться. –