我对范围和执行流程有一个不错的感觉,但是我很难理解为什么它不起作用:
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完成之前读取它时,它会出错。