Javascript不会在循环中生成函数
有人能告诉我这个代码有什么问题吗?第一:我没有得到期望的结果,第二:我得到了著名的“不要在循环中生成函数”。我怎样才能解决这个问题Javascript不会在循环中生成函数,javascript,function,loops,Javascript,Function,Loops,有人能告诉我这个代码有什么问题吗?第一:我没有得到期望的结果,第二:我得到了著名的“不要在循环中生成函数”。我怎样才能解决这个问题 // Modify this file to make `getNames` work as described // The tests in index.html will pass when the function is working // // Given a list of ids, this function should // - use the
// Modify this file to make `getNames` work as described
// The tests in index.html will pass when the function is working
//
// Given a list of ids, this function should
// - use the nameLookup api to find the name for each id
// - call the callback argument with an object in the format
// { 1: 'Name1', 2: 'Name2', 3: 'Name3' }
function getNames(ids, callback) {
var index,
id,
results = { };
for(index = 0; index < ids.length; index++) {
id = ids[index];
nameLookup.nameOf(id, function(name) {
results[id] = name;
});
}
callback(results);
}
因此,在循环之前创建函数:
function getFunc(id) {
return function(name) {
results[id] = name;
done ++;
if (done == ids.length) {
callback(results);
}
}
}
function getNames(ids, callback) {
var index,
id,
results = { };
var done = 0;
for(index = 0; index < ids.length; index++) {
id = ids[index];
nameLookup.nameOf(id, getFunc(id));
}
}
函数getFunc(id){
返回函数(名称){
结果[id]=名称;
完成++;
if(done==ids.length){
回调(结果);
}
}
}
函数getNames(ID、回调){
var指数,
身份证件
结果={};
var done=0;
对于(索引=0;索引function getFunc(id) {
return function(name) {
results[id] = name;
done ++;
if (done == ids.length) {
callback(results);
}
}
}
function getNames(ids, callback) {
var index,
id,
results = { };
var done = 0;
for(index = 0; index < ids.length; index++) {
id = ids[index];
nameLookup.nameOf(id, getFunc(id));
}
}
函数getFunc(id){
返回函数(名称){
结果[id]=名称;
完成++;
if(done==ids.length){
回调(结果);
}
}
}
函数getNames(ID、回调){
var指数,
身份证件
结果={};
var done=0;
对于(索引=0;索引whats
name
at,results[id]=name代码>??@SudhansuChoudhary-请参阅上一行。这是参数名。在这种情况下,创建新函数不会产生意外行为,因此您确实不需要更改它。但是,您可以通过将函数声明移到循环之外来优化代码,并反复使用相同的函数。什么是nameLookup
?@doo再次将其张贴在顶部,但是我不应该修改该部分whatsname
at,results[id]=name代码>??@SudhansuChoudhary-请参阅上一行。这是参数名。在这种情况下,创建新函数不会产生意外行为,因此您确实不需要更改它。但是,您可以通过将函数声明移到循环之外来优化代码,并反复使用相同的函数。什么是nameLookup
?@doo再次将其张贴在顶部,但是我不应该修改该部分在查找所有名称之前仍然调用回调啊,我现在看到了问题:)我进行了编辑,请检查是否存在竞争条件,因为每个异步请求共享相同的id
变量。基本上,您将得到结果
只包含一个条目,最后一个id作为键,以及返回最后一个id的请求的值(不一定是最后一个id)。@Prinzorn,换句话说,我们又回到了“在每个循环中创建函数”的过程中,将id包含在闭包中,不是吗?我想是这样的。老实说,我会直接使用,但因为这个问题听起来像是家庭作业,可能是不允许的。在查找所有名称之前仍会调用回调。啊,我现在看到了问题:)我进行了编辑,请检查您现在有一个争用条件,因为每个异步请求共享相同的id
变量。基本上,您将得到结果
只包含一个条目,最后一个id作为键,以及返回最后一个id的请求的值(不一定是最后一个id)。@Prinzorn,换句话说,我们又回到了“在每个循环中创建函数”的过程中,将id包含在闭包中,不是吗?我想是这样的。老实说,我会直接用,但因为这个问题听起来像是家庭作业,所以可能是不允许的。