@elyourn

Js: Почему интерпритатор не выдает var is not defined при обращении к id?

Был на собеседовании, задали такой вопрос. Код ниже. Поясните пожалуйста логику работы.
<div id="test"></div>
<script>
console.log(test);
</script>
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
Если для именования HTML элемента используется атрибут id и если объект Window еще не имеет свойства имя которого совпадает со значением атрибута id, то объект Window получает неперечисляемое свойство с именем соответствующим значению атрибута id, значением которого становится объект HTMLElement, представляющий этот элемент документа. Таким образом значения атрибута id в HTML документах становятся глобальными переменными, доступными сценариям. Если например документ включает элемент <button id="okay">, то на него можно сослаться с помощью глобальной переменной "okay". © Дэвид Флэнаган.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
dmitriy_novikov
@dmitriy_novikov
Занимаюсь web-разработкой с 2010г. http://dmnv.ru
Потому что переменная не объявлена через var и совпадает с id элемента.
В данном случае, элементы документа с id доступны как глобальные переменные с такими же именами.
Старый прикол.
Ответ написан
Комментировать
In4in
@In4in
°•× JavaScript Developer ^_^ ו°

Если элементу назначен специальный атрибут id, то можно получить его прямо по переменной с именем из значения id.

Это поведение соответствует стандарту. Оно существует, в первую очередь, для совместимости, как осколок далёкого прошлого и не очень приветствуется, поскольку использует глобальные переменные. Браузер пытается помочь нам, смешивая пространства имён JS и DOM, но при этом возможны конфликты.


https://learn.javascript.ru/searching-elements-dom...
Ответ написан
Комментировать
zualex
@zualex
Senior Software Engineer
Потому что test - это глобальная переменная в window. Вот ссылка на html стандарт (сайт долго открывается!).

window[name]
Returns the indicated element or collection of elements.

Но если использовать данный подход, то это приведет к хрупкому коду.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы