我是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?
答案 0 :(得分:1)
分配给变量IIFE
的{{1}}会关闭其中的变量counterDB
。这是一种将变量id
设为私有id
的方法。通过这样做,您只能从IIFE
内访问变量id
。这就是IIFE
返回的函数可以递增(或改变)其值的原因。
这也将避免全局命名空间污染,因为变量IIFE
无法在外部访问,因此没有其他函数或stmt可以更改其值(这可能会错误地发生)。