(相当)基本功能的返回值是“未定义”?

时间:2013-06-14 14:16:59

标签: javascript jquery

我很难让我的一个JavaScript函数返回它的值。请遵守以下代码:

function GW2API_getEventInfo(p_eventid) {
    console.log("Getting EventInfo for event " + p_eventid);
    $.each(arrEvents, function(i, eventItem) {
        $.each(eventItem, function(j, eventInfo) {
            if (eventInfo.event_id == p_eventid) {
                console.log(GW2API_getEventName(p_eventid) + " - " + eventInfo.state);
                return {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
            }
        });
    });
}

现在我想返回一个具有两个属性的对象:'name'和'state'。但是,无论我在console.log下添加什么,我的函数都没有返回任何内容(虽然找到了数据,因此控制台正在记录)。

currEvent = GW2API_getEventInfo(GW2API_events_ShadowBehemoth[i]); alert(currEvent) - >收益率“未定义”

2 个答案:

答案 0 :(得分:1)

它应该 - 你没有返回任何东西。

你在第二个$.each的匿名函数中返回了一些内容,但是你没有在GW2API_getEventInfo函数中返回任何内容。

也许这就是你的意思:

function GW2API_getEventInfo(p_eventid) {
    var result = null;
    console.log("Getting EventInfo for event " + p_eventid);
    $.each(arrEvents, function(i, eventItem) {
        $.each(eventItem, function(j, eventInfo) {
            if (eventInfo.event_id == p_eventid) {
                console.log(GW2API_getEventName(p_eventid) + " - " + eventInfo.state);
                result = {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
                return; //Out of the inner $.each
            }
        });
        if (result !== null) {
            return; //Out of the outer $.each
        }
    });
    return result; //Return the value in the GW2API_getEventInfo function
}

答案 1 :(得分:0)

使用.each()意味着您正在创建内部闭包功能。事实上,你是从闭包函数返回,但不是从你的主函数返回

你可能最好不要在这里使用jQuery .each(),只使用标准的Javascript for()循环。

function GW2API_getEventInfo(p_eventid) {
    for(var i=0; i<=arrEvents.length; i++) {
        var eventItem = arrEvents[i];
        for(var j=0; j<=eventItem.length; j++) {
            var eventInfo = eventItem[j];
            if (eventInfo.event_id == p_eventid) {
                return {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
            }
        });
    });
}

这避免了使用闭包函数的需要,这避免了对返回值的混淆。

它也可能比jQuery版本更快地运行。

(注意,我不知道你的数据结构;我假设它是arrEventseventItem都是数组。如果它们是对象,你需要使用{相反,{1}}样式循环,但原理是相同的)