我的javascript函数未返回任何内容。我真的不明白。这是可变范围的问题吗?

function getLanguage(){
    navigator.globalization.getLocaleName(
        function(locale){
            var lan = locale.value;
        },
        function(){
            var lan = null;
        }
    );
    return lan;
}


谢谢!

最佳答案

这是旧asynchronicity problem的副本,但是还有第二个问题-范围。

首先,范围。 lan变量是在内部函数中定义的,因此无法从外部看到。

function getLanguage(){
    var lan;
    navigator.globalization.getLocaleName(
        function(locale){
            lan = locale.value;
        },
        function(){
            lan = null;
        }
    );
    return lan;
}


那很简单。但是由于异步,它仍然无法工作。您必须将函数设置为使用回调:

function getLanguage(callback){
    navigator.globalization.getLocaleName(
        function(locale){
            callback(locale.value);
        },
        function(){
            callback(null);
        }
    );
}


而且,到目前为止,我们甚至不需要该变量,所以我摆脱了它。

然后,您将其称为:

getLanguage(function(lan){
    // something with lan here
});

09-20 13:03