Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Как вернуть имя анонимной функции для события?

Хочу повесить на событие функцию и одновременно вызвать её. Обычно для этого пишут примерно так:

var f = function () {
    if (window.location.hash) {
        scrollBy(0, -150);
    }
};
f();
window.addEventListener('hashchange', f);


А есть ли возможность это сделать чуть красивее? Что-то типа так:

window.addEventListener('hashchange', (function () {
    if (window.location.hash) {
        scrollBy(0, -150);
    }
    return 'this.имя'; //??
})());


Вместо 'this.имя', что?
Т.е. создать, выполнить, возвратить себя для события.
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 3
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
(function() {
    return arguments.callee;
})()()()().... ;

function namedFunc() {
    return namedFunc;
}
namedFunc()()()().... ;

var storedFunc = function() {
    return storedFunc;
};
storedFunc()()()().... ;

stackoverflow.com/questions/6959426/can-a-javascri...
Ответ написан
trushka
@trushka
(window.onhashchange=function(){
    if (window.location.hash) {
        scrollBy(0, -150);
    }
})()
Для пущего минимализьму можно window не писать))
Ну, а если уже очень хочется через addEventListener -
window.addEventListener('hashchange', (function fn() {
    if (window.location.hash) {
        scrollBy(0, -150);
    }
    return fn
})());
Но опять же, кто-то будет продираться через этот код - будет сильно матюкаться.. Сам когда-то таким увлекался, а потом сам продирался через эти джунгли с большим трудом, когда надо было что-то поменять..
Ответ написан
Комментировать
@Faliah
Вернуть имя анонимной функции нельзя, на то она и анонимная. Если бы можно было написать так, как вы хотите, то это в любом случае менее читаемо, чем ваш первый вариант. Вызов инициализирующего кода и привязка обработчиков событий, выполняют разные по своей семантике операции. Мне кажется, что смешивать их - не очень хорошо.

В верхнем примере ваш код читается как книга - сверху вниз, во втором примере необходимо увидеть IIFE, понять что оно делает и увидеть, что тут же происходит привязка обработчика.

Плюс каким образом вы будете изменять или тестировать этот обработчик в будущем, если такая необходимость возникнет, а он будет использоваться в обработке разных событий?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы