Почему функция постоянно возвращает undefined?

В момерт когда вы возвращаете result асинхронное собитие  onclick ещу не наступило. При этом, при каждом открытии меню у вас будет создаваться обработчик события что чревато не предсказуемым поведением и утечкой памяти.
Сделал немного по-другому. При клике на меню отрабатывало событие - там добавлялся HTML, повесил второе клик-событие не отдельно где-то в коде, а сделал его в виде атрибута (т.е. вместо старой разметки):elementAddMenu.innerHTML += '<div class="checkbox"></div>
Немного изменил, добавил обработчик:elementAddMenu.innerHTML += '<div class="checkbox" onclick="setCheckBox()"></div>
А сама функция при каждом клике вызывается и пишет значение в глобальную переменную.
Пока что только так. Сейчас попробую всё-таки поймать событие, написав обработчик в коде - нужно понять конкретнее, что происходит.
Всем спасибо за разъяснения и непосредственно участие.UPD
Переделал без использования глобальной переменной, обработчик находится внутри другого.var checkbox = document.getElementsByClassName('checkbox')[0];

    checkbox.onclick = function() {
      result = setCheckBox(checkbox);
    };