javascript函数返回undefined

jre*_*ton 4 javascript return function undefined

我确信我这样做有各种各样的错误,但我有以下函数在控制台中返回'undefined',即使它可以在函数中的相同位置console.log()所需的值,如代码中所述.

var tags = [4, 5];
console.log(getTagNames(tags)); // 'undefined'

function getTagNames(tagArray) {  

    $.getJSON('js/tags.json', function(data) {
        for (var i in tagArray) {
            tagArray[i] = tagArray[i].toString();
            var val = tagArray[i];

            for (var t in data) {
                var tag = data[t];
                var tagName = tag.alias;
                var tagId = tag.id;
                if (val === tagId) {
                    tagArray[i] = tagName;
                }
            };
        }
        console.log(tagArray); // output ["foo", "bar"] 
        return tagArray;
    });
}
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的事情是,在浏览器中运行此代码后,我可以在浏览器控制台中输入"tags",它会给我正确的结果["foo", "bar"].但是,当我尝试使用tags变量(即:元素的文本值等)时,它不起作用......是什么给出的?JavaScript不是我的第一语言,所以我对它的行为方式有点困惑.我只是不明白.

我已经阅读了几乎所有"可能已经有我的答案的问题",但答案提供了那些我无法弄清楚如何应用于我的功能.

注意:

  1. JSON来自Joomla(3.1)标签表.
  2. 我能够检索数据.
  3. val === tagId条件正常工作.
  4. 我喜欢爆米花.

Mic*_*zon 9

调用getJSON异步调用回调函数.

如果您需要该函数getTagNames并在代码中调用许多位置,您可以进行更改以使其自身采用回调函数:

function getTagNames(tagArray, cb) {  

    $.getJSON('js/tags.json', function(data) {
        for (var i in tagArray) {
            tagArray[i] = tagArray[i].toString();
            var val = tagArray[i];

            for (var t in data) {
                var tag = data[t];
                var tagName = tag.alias;
                var tagId = tag.id;
                if (val === tagId) {
                    tagArray[i] = tagName;
                }
            };
        }
        console.log(tagArray); // output ["foo", "bar"] 
        cb(tagArray);
    });
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

getTagNames(tags, function(tagArray) {
    // do something with tagArray
});
Run Code Online (Sandbox Code Playgroud)