Почему не обязательно объявлять переменную в Javascript перед ее использованием? - PullRequest
7 голосов
/ 24 февраля 2009

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

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

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

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

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

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

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

Ответы [ 5 ]

13 голосов
/ 24 февраля 2009

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

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

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

Это не веская причина. Но это тот, который у нас есть.

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

4 голосов
/ 24 февраля 2009

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

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

1 голос
/ 24 февраля 2009

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

1 голос
/ 24 февраля 2009

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

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

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

0 голосов
/ 24 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...