Почему не обязательно объявлять переменную в Javascript перед ее использованием?

В Javascript нам не нужно объявлять переменную с var ключевым словом перед ее использованием. Мы можем сразу делать такие вещи, как myCount = 12; или myStr = "Hello"; (где myCount, myStr не объявлены ранее). Любое такое использование объявляет и инициализирует переменные в «глобальной» области.

В чем могут быть причины для предоставления этой функции? И это вообще хороший стандарт?

ОБНОВЛЕНИЕ: мой вопрос не в том, в чем разница между «использованием переменной без объявления» и «объявлением, а затем использованием» и в том, как это влияет на область видимости.

У меня вопрос: «Почему в javascript разрешено использовать переменную напрямую, не объявляя ее?», Поскольку в большинстве языков программирования это строго проверяется.

ОБНОВЛЕНИЕ : я считаю, что следующий цитируемый текст отрицательно влияет на эту функцию. Итак, зачем вообще нужна эта функция?

"Предположим, что уже существует глобально объявленная переменная x ( var x="comparison string" ), о которой я не знаю, и я намерен создать свой собственный глобальный 'x' внутри одной из моих функций, инициализирую one ( x=-1 ), и в итоге я нарушаю другие функции.

Итак, есть ли вообще веская причина? за то, что у вас есть эта функция?

Ответов (5)

Решение

Javascript был предназначен для очень простых скриптов в браузере. Требовать объявления переменных казалось ненужным.

Конечно, это ошибка языка. И создатели javascript знают это. Они хотели это изменить. Но они не смогли. Почему?

Потому что Microsoft уже перепроектировала JavaScript и создала дубликат JScript с ошибками и всем остальным. Microsoft наложила вето на любые изменения, даже исправления, так как они были непреклонны в отношении того, чтобы не нарушать какие-либо сценарии. Таким образом, даже если они изменят JavaScript, JScript в IE останется прежним.

Это плохая причина. Но он у нас есть.

Источник: Я получил свой урок истории JavaScript от Дугласа Крокфорда: «Язык программирования JavaScript», http://video.yahoo.com/watch/111593/1710507 Эта часть истории длится от 9 до 11 минут видео.

Потому что это язык сценариев. Факт дети. Так оно и было задумано!

Веские причины? Честно говоря, не могу придумать ни одного, это одна из немногих вещей, которые мне действительно не нравятся в JS.

Это возможно, потому что все происходит в глобальной области, если не контролируется иным образом, а JS позволяет неявное создание переменных, как это. Стоимость этого - огромный потенциал для выявления ошибок и загрязнения, и только выгода, учитывая, что «this» существует для явного определения собственной области действия, а «окно» и «документ» существуют для глобальных ссылок, позволяет сэкономить несколько символов - что не является причиной вообще.

У меня вопрос: «Почему в javascript разрешено использовать переменную напрямую, не объявляя ее?», Поскольку в большинстве языков программирования это строго проверяется.

В этом разница между языками со статической и динамической типизацией. Javascript динамически типизирован, поэтому нет необходимости сначала объявлять. Как указывалось в других ответах, var ключевое слово больше отвечает за область действия переменной, чем ее объявление.

И я не думаю, что большинство языков программирования это проверяют.

У Lua похожая проблема: любая необъявленная переменная по умолчанию является глобальной. В списке рассылки это повторяющаяся тема с вопросом, почему она не должна быть «локальной по умолчанию». К сожалению, это внесло бы в язык очень неприятную двусмысленность, поэтому обычно можно сделать вывод «глобальный по умолчанию - это плохо, локальный по умолчанию - хуже».