Javascript - возвращение значения возвращаемой функции - PullRequest
0 голосов
/ 27 июня 2018

Я сейчас работаю над проектом, который в первую очередь является интерфейсом пользователя.

Прямо сейчас я столкнулся с проблемой с одной из моих функций, в которой возвращаемое значение возвращает саму функцию, а не ее создание.

Сначала я объясню ожидаемые результаты :

1.) На странице есть меню, при нажатии на кнопку в меню на страницу добавляется другое меню со своими собственными кнопками - Я буду называть это подменю.

2.) При нажатии кнопки, доступной в подменю , создается еще одно меню , которое добавляется в список в другом месте страницы.

Я объясню код, который у меня есть, а также где проблема лежит ниже:

1.) Вот где создается кнопка меню *1023*:

var add = document.createElement('button');

2.) Здесь я добавляю прослушиватель событий к кнопке выше:

closure = (function(arrayItem) 
{
    var test = function(event)
    { 
        object.spaces.push(selectedSpace.id);
        object.spaceobjects.push(selectedSpace);

        var enemyPanel = addEntityPanel(roomnumber, selectedSpace.id, object, object.savelocation, true);

        return enemyPanel ;
    };

return test;

})(arrayItem);

add.addEventListener("click", closure, false); 

Я использовал переменную closure и передал ей анонимную функцию по причинам закрытия, так что переменная arrayItem может быть изменена с помощью цикла for.

Вы можете заметить функцию addEntityPanel, эта функция создает меню , о котором я говорил, и добавляет его в список, а также возвращает объект со всеми элементами html, использованными для создания меню - сохранение его в переменной enemyPanel.

enemyPanel из функции test возвращается в переменную test, а test возвращается в переменную closure, которая должна дать мне доступ к объекту врагу, созданному в функции addEntityPanel; однако все, что возвращается, - это сама функция в виде строки. Я пытался изменить:

return test;

до

return test();

Но все это выполняет функцию при создании кнопки в подменю. Я хочу, чтобы он выполнялся только при нажатии кнопки.

Я не слишком знаком с замыканием, поэтому, если что-то не так с функцией замыкания, мешающей ей генерировать желаемый результат - я не удивлюсь.

Я открыт для любых предложений. Пожалуйста, дайте мне знать, что вы, ребята, думаете, спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

... enemyPanel из функции test возвращается в переменную test ...

Нет, это не так. Вы назначаете саму функцию переменной test, а не результатом ее вызова.

Есть две проблемы:

  1. Вы передаете неправильную функцию addEventListener. Это должна быть test, функция, созданная closure, а не closure.

    add.addEventListener("click", test, false);
    
  2. Вы возвращаете enemyPanel из обработчика событий. Возвращаемое значение обработчика событий, добавленное с помощью addEventListener , полностью игнорируется .¹ Вы не можете вернуть enemyPanel ни к чему. Вы можете создать его, назначить для переменной, находящейся в области действия этой функции, добавить ее в список и т. Д., Но вы не можете вернуть его где-либо из обработчика события.


¹ Это пост в моем маленьком анемичном блоге.

...