У меня есть обработчик событий и функции, используемые для добавления элементов в список и удаления элементов из списка. Моя первая функция (обработчик) работает с элементами btn, которые хранятся в локальной переменной для функций. Если я попытаюсь сделать то же самое с кнопкой удаления, я получу опорную ошибку в инструментах dev. Если я переместю переменную, которая вытаскивает кнопку удаления из функции и делает ее глобальной, тогда она работает. Почему одна функция работает с переменной для кнопки, установленной в функции, а другая - нет. Вот мой код. Переменные в вопросе прокомментированыОбласть видимости переменной Javascript и обработчики событий
var handler = function(event){
//this btn variable does work when declared inside handler function
var btn = document.getElementById('btn');
var input = document.getElementById('input').value;
var item = document.createElement('li');
var list = document.getElementById('list');
var x = document.createElement('button');
item.innerHTML = input;
list.appendChild(item);
item.appendChild(x);
};
//This dlt variable doesn't work if declared in function remove
var dlt = document.getElementById('delete');
var remove = function(event){
var list = document.getElementById('list');
var item = document.querySelector('li');
list.removeChild(item);
};
btn.addEventListener('click', handler);
dlt.addEventListener('click', remove);
Спасибо это очищает его. Я знаю о сфере действия и не имел никаких проблем с этим до сих пор, это просто меня бросило. С этими двумя обработчиками и всей переменной, что было бы лучше всего для меня сделать, чтобы глобальное пространство имен было как можно более ясным. Должен ли я вытащить переменные из функций и обернуть весь код в iife. Или это не очень хорошая практика для этого сценария. – mikeLspohn
Определенно полезно уменьшить количество необходимых глобальных переменных. –