我对范围和执行流程有一个不错的感觉,但是我很难理解为什么它不起作用:

var modalWindow = (function() {
    // Other code...
    modalBtn.addEventListener('click', modalWindow.closeModal);
    return {
        closeModal: function() {
            modalContainer.remove();
        }
    }
}());


这样做:

var modalWindow = (function() {
    // Other code...
    modalBtn.addEventListener('click', function() {
        modalWindow.closeModel());
    });
    return {
        closeModal: function() {
            modalContainer.remove();
        }
    }
}());


第一个抛出modalWindow是不确定的。我知道我可以声明一个命名对象并将closeModal放入其中,然后对其进行引用,并且在侦听器中不需要匿名函数。但是我很好奇后者为什么如此工作。

最佳答案

您提供的代码具有不匹配的(

我敢打赌,最终的结果看起来像这样:

})();


modalWindow的值是IIFE的返回值…,但是直到IIFE完成执行并实际返回一个值后,该值才得到。

在此之前,该值为undefined,因此当您尝试在IIFE完成之前读取它时,它会出错。

09-16 19:08