Функция Javascript, работающая с необъявленной переменной

Хорошо, так что ниже просто сжимает навигацию при прокрутке, но что-то заметил. Он все еще работал, хотя я поставил nav.classList, когда он должен был быть mainNav.classList. Затем я вошел в консоль, и nav и mainNav возвращают то же самое, даже если nav не объявлен. Это происходит с каждым идентификатором в моем HTML, поэтому, если я введу только имя идентификатора без getElementById, он все равно выйдет из узла. Я немного не понимаю, почему это работает. Это ново для ES6?

var mainNav = document.getElementById('nav'); //The whole navigation

window.addEventListener('scroll', function(){
  var scroll = window.pageYOffset | document.body.scrollTop;

  if (scroll < 100){
    nav.classList.remove('nav-shrink');
  } else {
    nav.classList.add('nav-shrink');
  }
});

Разве вы не пользуетесь какой-то библиотекой? Это нестандартное поведение. Если вы сможете показать нам больше своего кода, это может помочь нам помочь вам. Возможно, у вас заранее установлены какие-то глобальные переменные. Обновлено: В конце концов, часто можно ссылаться на свои элементы по их идентификатору. Моя плохая, не знала этого

Ludovit Mydla 14.04.2018 18:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не относится к ES6. Если у вас есть элемент DOM с идентификатором и вы используете этот идентификатор в качестве имени переменной (нигде больше не объявляется), вы получите элемент DOM:

Демо

console.info(hello);
<div id = "hello"></div>

Я никогда не знал этого, поэтому спасибо за ответ, но я предполагаю, что это плохая практика, и мне следует использовать getElementById

Zach4531 14.04.2018 19:34

@ Zach4531 Да, я не думаю, что вам следует использовать эту "функцию" в своем коде. Если вы поделитесь своим кодом с другими людьми, их может сбить с толку тот факт, что переменная нигде не объявлена, а если вы работаете с библиотеками или кодом других людей, их код мог нарушит вашу работу. Итак, делайте это по-чистому :)

blex 14.04.2018 19:39

Другие вопросы по теме