在节点中使用for循环的理想方式

时间:2018-10-16 15:44:45

标签: node.js for-loop web-scraping

我在node.js中编写了一个非常小的脚本,以检查如何使用循环将链接传递给函数。

我可以看到我可以通过两种方式做同样的事情,但无法弄清楚应该坚持哪种方式,这意味着哪一种是理想的,为什么?

一种方法:for (link in links) {}

var request = require('request');
var links = ['https://stackoverflow.com/questions/ask', 'https://github.com/request/request'];
for (link in links) {
    (function(url) {
        request(url, function() {
            console.log(url);
        });
    })(links[link]);
}

另一种方式:for (const link of links) {}

var request = require('request');
var links = ['https://stackoverflow.com/questions/ask', 'https://github.com/request/request'];
for (const link of links) {
    (function(url) {
        request(url, function() {
            console.log(url);
        });
    })(link);
}

1 个答案:

答案 0 :(得分:1)

没有理想的方法,或者至少没有通用的理想方法,所以我将指出两者之间的区别。

在第一个for循环中,您将数组作为一个对象进行迭代(在javascript数组中,该对象可以遍历索引)。但是执行后会创建一个名为link的全局变量。因此,创建了不需要的变量和内存位置。

执行后尝试console.log(link)

第二个for循环是ECMA Script 6引入的,不会创建全局变量,建议使用。由于可读性和对数据的更多控制,因此,如果需要,可以将链接定义为const。因此不会在循环内对其进行修改。

对于node.js,我猜第二个对于大多数情况可能是完美的。但是在javascript中,如果您将其从ES6编译到ES5,并且在大多数情况下都是如此,则第一个可能在性能方面更高。