首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数内部定义监听器函数

在函数内部定义监听器函数
EN

Stack Overflow用户
提问于 2020-10-29 23:18:29
回答 1查看 59关注 0票数 0

当我在函数外部定义函数时,我不能访问glide参数:

代码语言:javascript
复制
export const setFocusListenersForKeyboardNavigation = (glide) => {
    const slides = glide._c.Html.slides;
    for (let i = 0; i < slides.length; i++) {
        const currentSlide = slides[i];
        const slideButton = currentSlide.querySelector(".js-slide-button");
        const slideLink = currentSlide.querySelector(".js-slide-link");
        slideButton && slideButton.addEventListener('focus', focusListener);
        slideLink && slideLink.addEventListener('focus', focusListener);
    }
};

const focusListener = (event) => {
    const activeIndex = glide._i;
    const buttonIndex = event.target.dataset.slideIndex;
    if (activeIndex !== parseInt(buttonIndex)) {
        glide.go(`=${buttonIndex}`);
    }
};

因此,我做了这样的事情:

代码语言:javascript
复制
export const setFocusListenersForKeyboardNavigation = (glide) => {
    const focusListener = (event) => {
        const activeIndex = glide._i;
        const buttonIndex = event.target.dataset.slideIndex;
        if (activeIndex !== parseInt(buttonIndex)) {
            glide.go(`=${buttonIndex}`);
        }
    };

    const slides = glide._c.Html.slides;
    for (let i = 0; i < slides.length; i++) {
        const currentSlide = slides[i];
        const slideButton = currentSlide.querySelector(".js-slide-button");
        const slideLink = currentSlide.querySelector(".js-slide-link");
        slideButton && slideButton.addEventListener('focus', focusListener);
        slideLink && slideLink.addEventListener('focus', focusListener);
    }
};

我想知道这是hack还是一种好的做法?有没有更方便的方法来做这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 23:41:05

有外面的功能更好。主要是为了可读性和测试,但如果你的函数被调用了很多次(例如几百次),那么每次重新定义它都可能对性能造成影响。

您可以向侦听器添加箭头函数,该侦听器将使用正确的参数调用focusListener。你可以这样做:

代码语言:javascript
复制
export const setFocusListenersForKeyboardNavigation = (glide) => {
    const slides = glide._c.Html.slides;
    for (let i = 0; i < slides.length; i++) {
        const currentSlide = slides[i];
        const slideButton = currentSlide.querySelector(".js-slide-button");
        const slideLink = currentSlide.querySelector(".js-slide-link");
        slideButton && slideButton.addEventListener('focus', (event) => {focusListener(event, glide)});
        slideLink && slideLink.addEventListener('focus', (event) => {focusListener(event, glide));
    }
};

const focusListener = (event, glide) => {
    const activeIndex = glide._i;
    const buttonIndex = event.target.dataset.slideIndex;
    if (activeIndex !== parseInt(buttonIndex)) {
        glide.go(`=${buttonIndex}`);
    }
};

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64594072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档