我在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);
}
答案 0 :(得分:1)
没有理想的方法,或者至少没有通用的理想方法,所以我将指出两者之间的区别。
在第一个for循环中,您将数组作为一个对象进行迭代(在javascript数组中,该对象可以遍历索引)。但是执行后会创建一个名为link的全局变量。因此,创建了不需要的变量和内存位置。
执行后尝试console.log(link)
。
第二个for循环是ECMA Script 6引入的,不会创建全局变量,建议使用。由于可读性和对数据的更多控制,因此,如果需要,可以将链接定义为const
。因此不会在循环内对其进行修改。
对于node.js
,我猜第二个对于大多数情况可能是完美的。但是在javascript
中,如果您将其从ES6编译到ES5,并且在大多数情况下都是如此,则第一个可能在性能方面更高。