我已经阅读了关于循环内的闭包和闭包的一些解释.我很难理解这个概念.我有这样的代码:有没有办法尽可能地减少代码,因此闭包的概念可以更清晰.我很难理解i两个括号内的部分.谢谢
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function () {
alert(num);
};
}(i);
document.body.appendChild(link);
}
}
window.onload = addLinks;
Run Code Online (Sandbox Code Playgroud) 我确定我的问题是基于对node.js中的异步编程缺乏了解,但是这里有.
例如:我有一个我想要抓取的链接列表.当每个异步请求返回时,我想知道它是用于哪个URL.但是,大概是因为竞争条件,每个请求返回的URL都设置为列表中的最后一个值.
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
var url = links[link];
require('request')(url, function() {
console.log(url);
});
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
http://google.com
http://yahoo.com
Run Code Online (Sandbox Code Playgroud)
实际产量:
http://yahoo.com
http://yahoo.com
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
PS:对于1.我不想要一个检查回调参数的解决方案,而是一个回调知道变量'从上面'的一般方法.