功能未返回正确的值

时间:2013-10-04 20:07:51

标签: javascript scope

所以我有这两个函数,然后是另一个函数调用它们。看起来我在功能调用之间失去了范围。

var determineInteractionType = function( interaction ){

    var param = interaction.parameterSet.param;

    param.forEach(function( parameter, index, array ){
        if( parameter.name === "INTERACTION-TYPE" ){
            return parameter.value;
        }
    });
    return null;
};

var getInteraction = function( id ){        

    customInteractions.forEach( function(interaction, index, array){            
        if( interaction.id == id ){
            alert( id );
            return interaction;
        }
    });
    return null;
};

这是调用函数的代码片段。错误是即使getInteraction正在返回一个值,它也会显示确定initInteraction传递的参数为null。

var _convertStemFromEAS = function(stem) {
    var reg = new RegExp('@\{PRESENTATION-HTML-INTERACTION\}="(.*?)"');
    var result;
    var count = 1;      

    while ((result = reg.exec(stem)) !== null) {

        var Match = result[0];
        var dropdownGuid = result[1];

//The Error seems to be right here
        var interactionType = determineInteractionType( getInteraction( id ) );


        if( interactionType === "shortTextInteraction" ){           
            var escaped = $('<div/>').text('<select id="' + NewTmpGuid() + '" data-choice-id="' + dropdownGuid + '" style="width:100px;" data-count="' + count + '" class="easSelection"><option>DD' + count + '</option></select>').html();
        }else if( interactionType === "essayTextInteraction" ){

        }

        count += 1;
        stem = stem.replace(Match, escaped);
    }   
    return stem;    
};

1 个答案:

答案 0 :(得分:1)

determineInteraction返回null,因为这是它被编码返回的内容。

当您从forEach循环中的内部函数return时,您不会从determineInteraction返回。

你想要做的是这样的事情:

var determineInteractionType = function( interaction ){

    var 
    returnValue = null,
    param = interaction.parameterSet.param;


    param.forEach(function( parameter, index, array ){
        if( parameter.name === "INTERACTION-TYPE" ){
            returnValue = parameter.value;
        }
    });

    return returnValue;
};