这是关闭吗?这可能有什么意义
Is this closure? What might be the point of this?
我对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?
分配给变量counterDB
的IIFE
关闭其中的变量id
。这是一种使变量id
私有于该IIFE
的方法。通过这样做,您可以使变量id
只能从 IIFE
内部访问。这就是为什么IIFE
返回的函数可以增加(或更改)其值的原因。
这也将避免全局命名空间污染,因为变量id
在外部无法访问,因此没有其他函数或 stmt 可以更改其值(这可能会错误地发生)。
相关文章:
- 边栏按钮和infoWindow是否可能有不同的内容
- 有没有可能有多个有棱角和咕哝的跑步块
- 使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格
- React Native AlertOS api中可能有多个文本字段
- 可能有一个javascript和php的配置文件
- 使用Javascript客户端进行REST基本身份验证的安全缺陷是什么(如果有的话)
- 这个Javascript变量怎么可能有价值
- 什么可能导致在标识 .json 发布调用中出现 406
- 有什么可能的方法可以使用 Node.js 更快地发送 GET 请求
- 什么可能导致 MVC 应用在从数据库中提取后无法在 IE 中显示当前信息
- 什么可能打破滚动到
- 这是关闭吗?这可能有什么意义
- DIV标签和HTML5元素之间应该使用什么以及有什么区别(部分,文章)
- 代码只是没有执行,可能有语法问题,或者我可能完全错了
- 什么可能导致jQuery本身中随机出现的错误
- 这个JavaScript函数有什么作用?有意义吗
- 一个有内容的iFrame怎么可能有一个未定义的contentDocument对象
- javascript forEach循环可能有奇怪的输出
- 变量数组中的对象是否可能有2个值
- 我可以使用什么代替 id 属性,以防可能有重复项