Javascript JS:在哪里实例化返回另一个函数的函数?

Javascript JS:在哪里实例化返回另一个函数的函数?,javascript,Javascript,我正在制作一个无限卷轴,我做的第一件事是附加一个eventListener来检测卷轴何时接近底部,如果接近底部,则触发scrollLoader() 我制作了下面的scrollLoader函数,现在,它使用setTimeout来模拟异步获取,直到我有一个端点为止。该函数返回一个函数,以便加载数据不在全局范围内 function checkScroll() { let loadingData; return function() { if

我正在制作一个无限卷轴,我做的第一件事是附加一个eventListener来检测卷轴何时接近底部,如果接近底部,则触发
scrollLoader()

  • 我制作了下面的
    scrollLoader
    函数,现在,它使用setTimeout来模拟异步获取,直到我有一个端点为止。该函数返回一个函数,以便
    加载数据
    不在全局范围内

      function checkScroll() {
          let loadingData;
    
          return function() {    
              if (loadingData) {
                  return
              }
              loadingData = true;
              new Promise((resolve) => {
                  setTimeout(() => {
                      resolve()
                  }, 5000)
              })
              .then(() => {
                  loadingData = false;
              })
          }
      }
    
因此我需要实例化
scrollLoader
,因为它返回一个函数,并用变量的

const detectScroll=scrollLoader()

并编辑eventListener以立即调用它,而不是直接调用
scrollLoader()

    window.addEventListener('scroll', () => {
        if (window.innerHeight + window.scrollY + 100 >= document.body.offsetHeight) {
            detectScroll();
        }
    })
我应该把这一行放在代码的什么地方(
const detectScroll=scrollLoader()
)?无论我把它放在哪里,它似乎都不合适,因为它只是在那里实例化一次。

如果这是唯一一个使用此代码的地方,那么这是使用立即调用函数表达式(IIFE)的最佳时机:

注意语法:
(()=>{…})()

window.addEventListener('scroll',()=>{
if(window.innerHeight+window.scrollY+100>=document.body.offsetHeight){
让我们加载数据;
(() => {
if(加载数据){
返回
}
加载数据=真;
新承诺((决议)=>{
设置超时(()=>{
解决()
}, 5000)
})
.然后(()=>{
loadingData=false;
})
})();
}
})

您可能使这项工作变得比需要的更困难。是否有某些原因导致加载数据不能存在于全局范围中?如果它不在全局范围内,那么至少需要将其作为参数传递给checkScroll();否则,函数将始终使用falsy值来加载数据,因为变量是在函数本身中实例化的。这是一个闭包,所以如果实例化一次,变量值将存在于函数中,谢谢!如果我不使用IFFE呢?实例化应该存在于代码中的什么地方?您是希望按照自己的方式进行,还是希望学习并遵循最佳实践?作为旁注,您不实例化函数,而是调用或调用它们。但是,如果您想按自己的方式做事,占用更多内存并浪费CPU周期,用函数调用替换IIFE,那么您实际上可以根据上面的代码执行
scrollLoader()()
。那就行了。@RicardoAlvveroa-请考虑:
    window.addEventListener('scroll', () => {
        if (window.innerHeight + window.scrollY + 100 >= document.body.offsetHeight) {
            detectScroll();
        }
    })