这个关闭?这可能是什么意思?

时间:2015-01-05 09:43:46

标签: javascript closures anonymous-function

我是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);
    })();
  }

尤其围绕counterDB var,创建如此多的嵌套匿名函数有什么意义?

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

if(counterDB()<maximumSolutions)`

为什么这一切?为什么不只是CurrentModule.increment()或smth?

1 个答案:

答案 0 :(得分:1)

分配给变量IIFE的{​​{1}}会关闭其中的变量counterDB。这是一种将变量id设为私有id的方法。通过这样做,您只能从IIFE内访问变量id。这就是IIFE返回的函数可以递增(或改变)其值的原因。

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