这是关闭吗?这可能有什么意义

Is this closure? What might be the point of this?

本文关键字:什么 可能有      更新时间:2023-09-26

我对Javascript相当陌生,我拿起了一个代码库,在其中我看到了以下代码片段:

if (DEBUG == false) { // WHAT S ALL THIS?!!
    while ((request = UrlS.pop()) != null) {
      (function() {
        var counterDB = (function() {
          var id = 0;
          return function() {
            return id++;
          }; // Return and increment
        })();
        var tw = items[num];
        console.log("Request " + request);
        getFeed(request, tw, httpRequestCallback, counterDB);
      })();
    }
  } else { // WHAT S ALL THIS?!! #2
    (function() {
      var counterDB = (function() {
        var id = 0;
        return function() {
          return id++;
        }; // Return and increment
      })();
      var tw = items[num];
      request = UrlS.pop();
      getFeed(request, tw, httpRequestCallback, counterDB);
    })();
  }

尤其是在 var counterDB周围,创建这么多嵌套匿名函数有什么意义?

通过快速搜索,我发现它在其他地方用于检查:"

if(counterDB()<maximumSolutions)`
为什么会

这样?为什么不直接CurrentModule.increment()或SMTH?

分配给变量counterDBIIFE关闭其中的变量id。这是一种使变量id私有于该IIFE的方法。通过这样做,您可以使变量id只能从 IIFE 内部访问。这就是为什么IIFE返回的函数可以增加(或更改)其值的原因。

这也将避免全局命名空间污染,因为变量id在外部无法访问,因此没有其他函数或 stmt 可以更改其值(这可能会错误地发生)。