了解javascript中forEach和for的区别
我正在使用twitch.tv API编写一个应用程序,为此我需要为不同的用户进行多个getJSON()调用。以下输出是否有任何解释了解javascript中forEach和for的区别,javascript,ajax,foreach,Javascript,Ajax,Foreach,我正在使用twitch.tv API编写一个应用程序,为此我需要为不同的用户进行多个getJSON()调用。以下输出是否有任何解释 //users array contains the list of users for which data is fetched var users = ["freecodecamp", "brunofin", "storbeck", "medrybw", "comster404", "terakilobyte", "habathcx","RobotCaleb"
//users array contains the list of users for which data is fetched
var users = ["freecodecamp", "brunofin", "storbeck", "medrybw", "comster404", "terakilobyte", "habathcx","RobotCaleb","thomasballinger","noobs2ninjas","beohoff"];
使用简单for循环时:for (var i = 0; i < users.length; i++) {
var user = users[i];
$.getJSON("https://api.twitch.tv/kraken/streams/" + user + "?callback=?", function(json) {
var add = user;
if(json.status === 422) {
add = add + ' ' + "Closed";
} else {
if (json.stream === null) {
add = add + ' ' + "Offline";
} else {
add = add + ' ' + json.stream.game;
}
}
$("#userList").append("<div>" + add + "</div>");
});
};
使用forEach时:users.forEach(function(user) {
$.getJSON("https://api.twitch.tv/kraken/streams/" + user + "?callback=?", function(json) {
var add = user;
if(json.status === 422) {
add = add + ' ' + "Closed";
} else {
if (json.stream === null) {
add = add + ' ' + "Offline";
} else {
add = add + ' ' + json.stream.game;
}
}
$("#userList").append("<div>" + add + "</div>");
});
});
在forEach的情况下,ajax调用是按顺序进行的,还是有其他操作?使用for(var i=0;i
,随后将值0分配到users.length-1到i
,并对其执行操作,但保持相同的关闭状态
由于js的异步特性,您在收到第一个答案之前发送所有json请求。当您的答案到达时,user
具有值users[users.length-1]
,然后在所有输出中使用该值
使用users.forEach(function(user){…}
,您可以为每个用户元素创建一个新的闭包。在每个闭包中,您有一个本地user
变量,当json请求的响应发生变化时,您将使用该变量。使用for(var i=0;i
,随后,将值0分配给i
,直到users.length-1,并对其进行处理,但保持相同的闭包
由于js的异步特性,您在收到第一个答案之前发送所有json请求。当您的答案到达时,user
具有值users[users.length-1]
,然后在所有输出中使用该值
使用
users.forEach(函数(用户){…}
,为每个用户元素创建一个新的闭包。在每个闭包中,都有一个本地user
变量,当json请求的响应发生变化时,将使用该变量。当使用for
循环进行迭代并在其范围内运行异步代码时,当Ajax第一次返回时,迭代已经结束
使用forEach循环,您为每个迭代运行回调,创建一个新的socpe,即使迭代已经结束,每个函数现在都在事件循环中等待调用
您可以这样做,因此它将是相同的:
for (var i = 0; i < users.length; i++) {
getUser(user[i]);
};
function getUser(user){
$.getJSON("https://api.twitch.tv/kraken/streams/" + user + "?callback=?", function(json) {
var add = user;
if(json.status === 422) {
add = add + ' ' + "Closed";
} else {
if (json.stream === null) {
add = add + ' ' + "Offline";
} else {
add = add + ' ' + json.stream.game;
}
}
$("#userList").append("<div>" + add + "</div>");
});
}
for(var i=0;i
理解它的最佳方法是使用setTimeout和print i循环:
for(var i = 0; i < 10; i++){
setTimeout(function(){ console.log(i) }, 100);
};
for(变量i=0;i<10;i++){
setTimeout(function(){console.log(i)},100);
};
它将输出:10十次,并运行一个函数:
for(var i = 0; i < 10; i++){
log(i)
};
function log(i){ setTimeout(function(){ console.log(i)}, 100) };
for(变量i=0;i<10;i++){
日志(一)
};
函数日志(i){setTimeout(function(){console.log(i)},100)};
希望有帮助。当您使用
for
循环并在其范围内运行异步代码时,当Ajax第一次返回时,迭代已经结束
使用forEach循环,您为每个迭代运行回调,创建一个新的socpe,即使迭代已经结束,每个函数现在都在事件循环中等待调用
您可以这样做,因此它将是相同的:
for (var i = 0; i < users.length; i++) {
getUser(user[i]);
};
function getUser(user){
$.getJSON("https://api.twitch.tv/kraken/streams/" + user + "?callback=?", function(json) {
var add = user;
if(json.status === 422) {
add = add + ' ' + "Closed";
} else {
if (json.stream === null) {
add = add + ' ' + "Offline";
} else {
add = add + ' ' + json.stream.game;
}
}
$("#userList").append("<div>" + add + "</div>");
});
}
for(var i=0;i
理解它的最佳方法是使用setTimeout和print i循环:
for(var i = 0; i < 10; i++){
setTimeout(function(){ console.log(i) }, 100);
};
for(变量i=0;i<10;i++){
setTimeout(function(){console.log(i)},100);
};
它将输出:10十次,并运行一个函数:
for(var i = 0; i < 10; i++){
log(i)
};
function log(i){ setTimeout(function(){ console.log(i)}, 100) };
for(变量i=0;i<10;i++){
日志(一)
};
函数日志(i){setTimeout(function(){console.log(i)},100)};
希望能有所帮助。(A)同步JAX…您将以网络神允许服务器响应到达您的客户端的任意随机顺序从getjson调用中获得响应。这基本上是一种竞争条件,无法确定它们将以何种顺序到达。您可能会按顺序发出响应,但响应基本上是随机的ered。@MarcB是的,我是在搜索时知道的。但是,为什么所有的用户名都保留在forEach中,而不保留在for中?相关:(A)同步JAX…您将以网络神允许服务器响应到达您的客户端的任意随机顺序从getjson调用中获得响应。这基本上是一种竞争条件,无法确定它们将以何种顺序到达。您可能会按顺序发出响应,但响应基本上是随机的ered。@MarcB是的,我是在搜索时知道的。但是,为什么所有的用户名都保留在forEach中,而不保留在for中?相关: