Как изменить определение функции, захваченное в замыкании

Lamora спросил: 13 октября 2017 в 06:50 в: javascript

Это еще один вопрос закрытия Javascript. Я запускаю следующий код, как только документ загружается:

 var handlers = (function () {    var clickHandler = function() { alert ('click!'); }
    return {
        clickHandler : clickHandler
    }
}());$('#element').addEventListener('click', handlers.clickHandler);

Затем, на более позднем этапе, я хочу заменить функциональность обработчика и, таким образом, сделать что-то вроде:

handlers.clickHandler = function() { alert ('changed handler!'); }

Исходя из моего понимания замыканий Javascript, прослушиватель событий должен сохранять ссылку на функцию clickHandler, и, таким образом, функциональность должна соответственно меняться. Тем не менее, это не то, что происходит. Слушатель событий запускает начальную функцию. Мне удалось добиться результата, который я хочу использовать с помощью eval, но это похоже на хак. Есть ли законный способ делать то, что я хочу?

0 ответов