Javascript 为什么在循环中返回时函数返回值未定义?

Javascript 为什么在循环中返回时函数返回值未定义?,javascript,jquery,Javascript,Jquery,我不明白为什么会这样 下面的函数总是返回未定义的。即使满足条件,也应返回一个值 function GetAnswerForProcessQuestion(pprID) { var answer; $.each(answerCollection, function (index, item) { var thisPprID = item["PprID"]; if (thisPprID == pp

我不明白为什么会这样

下面的函数总是返回未定义的。即使满足条件,也应返回一个值

function GetAnswerForProcessQuestion(pprID)
    {
        var answer;
        $.each(answerCollection, function (index, item)
        {
            var thisPprID = item["PprID"];
            if (thisPprID == pprID)
            {
                answer = item["Answer"];
            }
        });
        return answer;
    }
下面是answerCollection变量的一个实例

[
Object
Answer: "2"
AnswerText: undefined
OpsID: "24"
PprID: "2"
Question: "How many colors?"
__proto__: Object
]

但是,如果我在循环中设置了一个变量,然后在循环完成后返回该变量,则返回正确的值

function GetAnswerForProcessQuestion(pprID)
    {
        var answer;
        $.each(answerCollection, function (index, item)
        {
            var thisPprID = item["PprID"];
            if (thisPprID == pprID)
            {
                answer = item["Answer"];
            }
        });
        return answer;
    }

你知道为什么我不能从循环内部返回值吗?

你是从内部函数返回的,而不是从外部函数返回的。这就是为什么外部函数返回
underfined
,因为这是默认值

您可以使用
返回false
立即结束每个循环,然后返回结果

function GetAnswerForProcessQuestion(pprID)
{
    var answer;
    $.each(answerCollection, function (index, item)
    {
        var thisPprID = item["PprID"];
        if (thisPprID == pprID)
        {
            answer = item["Answer"];
            return false;
        }
    });
    return answer;
}

$。每个都是自己的函数,请注意$。每个(应答集合,函数(索引,项)


您将从该函数返回,而不是从父函数返回。

循环有一个匿名函数。当您返回时,您将从该内部函数返回,循环将继续


您应该设置变量,然后从内部函数返回false(这将中断each循环),然后从外部函数返回变量。

您在
$中的回调。代码中的每个
定义如下:

function callback(index, item)
{
    var thisPprID = item["PprID"];
    if (thisPprID == pprID)
    {
        var answer = item["Answer"];
        return answer;
    }
}
该函数中包含以下内容:

function GetAnswerForProcessQuestion(pprID)
{
    $.each(answerCollection, callback);
}
这意味着在top函数中,什么都没有发生!对于每个项,您计算出一些东西,它将保持在循环中


在第二个代码中,保存外部函数作用域的答案。这样,外部函数可以返回它。

$返回值。每个
都不会从父函数返回值。请尝试这样做:

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;
    }

很简单,因为返回值在运行函数的外部或内部。 我建议您对每个代码使用java脚本默认值:

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
}

来自:

我们可以通过使 回调函数返回false。返回非false与 for循环中的continue语句;它将立即跳到下一个循环 迭代


jquery中的.each不返回从您调用的函数返回的值。它分别响应
返回true;
返回false;
作为模拟
继续;
中断;
的一种方式。此外,.each从不返回值。因此,从您调用的函数返回任何其他内容都将永远不会被传下去


第二个表单工作的原因是变量作用域的方式。由于变量是在函数的父函数中声明的。每个调用都可以在函数中访问并进行设置。由于它的作用域属于父函数,因此可以在该父函数中读取和返回它。

jquery中的每个都不允许t对被调用函数内的中断或延续不响应。如果要模拟
中断;
请使用
返回false;
。要模拟
继续;
请使用
返回true;