为什么在循环中返回时函数返回值未定义
Why is function return value undefined when returned in a loop?
我不知道为什么会这样。
以下函数始终返回未定义。 即使满足条件并且应返回值。
下面是 answerCollection 变量的一个实例。
[
Object
Answer: "2"
AnswerText: undefined
OpsID: "24"
PprID: "2"
Question: "How many colors?"
__proto__: Object
]
.
function GetAnswerForProcessQuestion(pprID)
{
$.each(answerCollection, function (index, item)
{
var thisPprID = item["PprID"];
if (thisPprID == pprID)
{
var answer = item["Answer"];
return answer;
}
});
}
但是,如果我在循环中设置了一个变量,然后在循环完成执行后返回该变量,则返回正确的值。
function GetAnswerForProcessQuestion(pprID)
{
var answer;
$.each(answerCollection, function (index, item)
{
var thisPprID = item["PprID"];
if (thisPprID == pprID)
{
answer = item["Answer"];
}
});
return answer;
}
关于为什么我不能从循环内部返回值的任何想法?
从$.each
返回值不会返回父函数的值。尝试这样做:
function GetAnswerForProcessQuestion(pprID)
{
var answer;
$.each(answerCollection, function (index, item)
{
var thisPprID = item["PprID"];
if (thisPprID == pprID)
{
answer = item["Answer"];
return false; // break loop
}
});
return answer;
}
,仅仅是因为返回值在正在运行的函数的外部或内部。我建议你为每个代码使用 JavaScript 默认:
function GetAnswerForProcessQuestion(pprID)
{
for (var i in answerCollection){ // note that answerCollection must be defined
// globaly or passed in
var thisPprID = answerCollection[i]["PprID"];
if (thisPprID == pprID) //checking if it's the value
{
return answerCollection[i]["Answer"]; //if the condition is true return it
}
}
return false; // if you find nothing you end up here
}
函数内部定义的变量将可访问该函数内的任何其他函数,但不能访问该函数外部。 含义:
function somefunction(){
var test='the value';
function testing(){ alert(test); } //will alert 'the value' since the variable was
testing(); //defined in the functions scope
function testing(){
var test=1;//the test ins now defined under the function testing()
}
alert(test); //will alert 'undefined' since it was not defined in the global scope
}
jquery 中的 .each 不返回从您调用的函数返回的值。它响应return true;
和return false;
,分别作为模拟continue;
和break;
的一种方式。此外,.each 从不返回值。因此,从被调用的函数返回任何其他内容将永远不会被传递。
您的第二个表单起作用的原因是由于变量作用域的方式。由于变量是在 .each 调用包装的函数的父函数中声明的,因此可以在函数内部访问并且可以设置该变量。它的作用域属于父级的事实允许在该父级中读取和返回它。
您是从内部函数返回的,而不是外部函数。这就是为什么外部函数返回underfined
,因为这是默认值。
您可以使用 return false;
立即结束 each 循环,然后返回结果。
function GetAnswerForProcessQuestion(pprID)
{
var answer;
$.each(answerCollection, function (index, item)
{
var thisPprID = item["PprID"];
if (thisPprID == pprID)
{
answer = item["Answer"];
return false;
}
});
return answer;
}
http://jsfiddle.net/mN5B3/
$.each 是它自己的函数,请注意 $.each(answerCollection, 函数 (index, item)
你从那里回来了,而不是父母。
循环有一个匿名函数。当您返回时,您从该内部函数返回,循环继续。
您应该设置变量,然后从内部函数返回 false(这将中断 each 循环),然后从外部函数返回变量。
代码中$.each
内的回调定义如下:
function callback(index, item)
{
var thisPprID = item["PprID"];
if (thisPprID == pprID)
{
var answer = item["Answer"];
return answer;
}
}
哪个在函数中:
function GetAnswerForProcessQuestion(pprID)
{
$.each(answerCollection, callback);
}
这意味着在顶部功能中,什么都没有发生!对于每个项目,您计算一些内容,并且它保持在循环中。
在第二个代码中,将答案保存到外部函数的作用域。这样,外部函数就可以返回它。
来自 jQuery .each() 文档:
我们可以在特定迭代中打破 $.each() 循环,方法是使 回调函数返回假。返回非假与 在 for 循环中继续语句;它将立即跳到下一个 迭 代。
- 根据是否解析了 Promise 从函数返回值
- 从Ajax函数返回值
- 如何从嵌套的API函数返回值
- 从异步函数返回值
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 从节点中的回调函数返回值
- 提交时不采用函数返回值.并且没有按预期行事
- 如何从工厂传递的函数返回值
- 为什么在循环中返回时函数返回值未定义
- 从JavaScript中的嵌套函数返回值
- 存在从函数返回值的问题
- 如何从setinterval函数返回值
- javascript:从匿名函数返回值
- angularjs从html调用函数返回值
- 从命名函数返回值
- 无法从Javascript中的嵌套函数返回值
- 这是显示javascript函数返回值的最佳方式吗
- 使用ajax和回调函数向函数传递值/从函数返回值
- 构造函数中的函数返回值
- 尝试从开关语句 -JS- 中的函数返回值