相关疑难解决方法(0)

请解释在循环中使用JavaScript闭包

我已经阅读了关于循环内的闭包和闭包的一些解释.我很难理解这个概念.我有这样的代码:有没有办法尽可能地减少代码,因此闭包的概念可以更清晰.我很难理解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)

javascript closures scope loops

56
推荐指数
2
解决办法
3万
查看次数

Node.JS:如何将变量传递给异步回调?

我确定我的问题是基于对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)

所以我的问题是:

  1. 如何将url(按值)传递给回调函数?要么
  2. 链接HTTP请求以便顺序运行的正确方法是什么?要么
  3. 我还缺少什么?

PS:对于1.我不想要一个检查回调参数的解决方案,而是一个回调知道变量'从上面'的一般方法.

javascript asynchronous web-crawler node.js

42
推荐指数
3
解决办法
4万
查看次数