最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript function doesn't return anything - Stack Overflow

programmeradmin3浏览0评论

My javascript function doesn't return anything. I really don't get it. Is it a problem of variable scope?

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

Thank you!

My javascript function doesn't return anything. I really don't get it. Is it a problem of variable scope?

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

Thank you!

Share Improve this question asked Dec 21, 2014 at 20:28 DescampsAuDescampsAu 1,0662 gold badges10 silver badges29 bronze badges 3
  • 3 Yes, scope is the issue. Define lan before navigator.globalization.getLocaleName – Neil Turner Commented Dec 21, 2014 at 20:31
  • It is returning lan; did you check to see what its value is? – Scott Hunter Commented Dec 21, 2014 at 20:33
  • If you want to avoid callback-soup use Promises: developer.mozilla/en/docs/Web/JavaScript/Reference/… – Halcyon Commented Dec 21, 2014 at 20:43
Add a ment  | 

1 Answer 1

Reset to default 4

This is a duplicate of the old asynchronicity problem, but there's a second issue as well -- scope.

First of all, scope. The lan variable is defined inside the internal function, and so cannot be seen from outside.

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

That was easy. But it still won't work, due to asynchronity. You have to set up your function to use a callback instead:

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

Also, by now, we don't even need the variable, so i got rid of it.

Then, you call it as:

getLanguage(function(lan){
    // something with lan here
});
发布评论

评论列表(0)

  1. 暂无评论