Почему не обязательно объявлять переменную в Javascript перед ее использованием?
В Javascript нам не нужно объявлять переменную с var
ключевым словом перед ее использованием. Мы можем сразу делать такие вещи, как myCount = 12;
или myStr = "Hello";
(где myCount, myStr не объявлены ранее). Любое такое использование объявляет и инициализирует переменные в «глобальной» области.
В чем могут быть причины для предоставления этой функции? И это вообще хороший стандарт?
ОБНОВЛЕНИЕ: мой вопрос не в том, в чем разница между «использованием переменной без объявления» и «объявлением, а затем использованием» и в том, как это влияет на область видимости.
У меня вопрос: «Почему в javascript разрешено использовать переменную напрямую, не объявляя ее?», Поскольку в большинстве языков программирования это строго проверяется.
ОБНОВЛЕНИЕ : я считаю, что следующий цитируемый текст отрицательно влияет на эту функцию. Итак, зачем вообще нужна эта функция?
"Предположим, что уже существует глобально объявленная переменная x
( var x="comparison string"
), о которой я не знаю, и я намерен создать свой собственный глобальный 'x' внутри одной из моих функций, инициализирую one ( x=-1
), и в итоге я нарушаю другие функции.
Итак, есть ли вообще веская причина? за то, что у вас есть эта функция?
Ответов (5)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 похожая проблема: любая необъявленная переменная по умолчанию является глобальной. В списке рассылки это повторяющаяся тема с вопросом, почему она не должна быть «локальной по умолчанию». К сожалению, это внесло бы в язык очень неприятную двусмысленность, поэтому обычно можно сделать вывод «глобальный по умолчанию - это плохо, локальный по умолчанию - хуже».