在纯 JavaScript 中只执行一次局部函数?

Execute a local function only once in pure JavaScript?

这看起来很简单,但我还没有找到合适的解决方案。

JS 的作用:立即检查元素的 CSS 样式,如果 max-width 为 1000px,则执行某些操作(参见 JS 注释)。 如果 JS 在应用 CSS 之前执行,请在文档加载完成后再次检查。 但是“做某事”应该只发生一次,所以如果立即完成,就不要通过事件监听器再次做。

但是如何避免呢?使用全局变量或函数会很容易,但我想将它们保留在本地。

(function()
{
    function checkCSS()
    {
        if (window.getComputedStyle(element).getPropertyValue('max-width') == '1000px')
        {
            // do something, but only once!
        }
    }
    checkCSS();
    window.addEventListener('load', function() {checkCSS();});
})();

您可以在完成“某事”后删除处理程序,请参阅评论:

(function() {
    function checkCSS() {
        if (window.getComputedStyle(element).getPropertyValue("max-width") === "1000px") {
            // do something, but only once!
            // *** Remove the listener
            window.removeEventListener("load", checkCSS);
        }
    }

    // *** Add the listener
    window.addEventListener("load", checkCSS); // <== Note using the function directly
    // *** Do the initial check
    checkCSS();
})();

或者只有当你没有做“某事”时才添加它:

(function() {
    function checkCSS() {
        if (window.getComputedStyle(element).getPropertyValue("max-width") === "1000px") {
            // do something, but only once!
            // *** We did it (you could remove the listener here, but it doesn't really matter)
            return true;
        } else {
            // *** Didn't do it
            return false;
        }
    }

    // *** Do the initial check
    if (!checkCSS()) {
        // *** Didn't do it, add the listener
        window.addEventListener("load", checkCSS); // <== Note using the function directly
    }
})();

要在“应用CSS”之前触发它,您可以使用不同的事件,例如,DOMContentLoaded

window.addEventListener('DOMContentLoaded', checkCSS)