Javascript scope problem

2019-07-20 05:50发布

I am calling this function, assigning the result to a variable in the callback and then logging the result, but I keep getting undefined.

var id;
test.getID(function(result) {
    id=result;
});
console.log(id);

If I change it to the code below, then I can see the id logged.

var id;
test.getID(function(result) {
    id=result;   
    console.log(id);
});

Do you know what I can do to be able to access the result of the getID function?

2条回答
该账号已被封号
2楼-- · 2019-07-20 06:08

The getID function will need to invoke its parameter before you will see id change.

Since you do not provide its implementation, let's assume it's something like this. Pay close attention to the implementation of getID, it takes a function as the parameter, f, and then invokes it. This is when id will be set.

var id;
var test = { 
    getID: function(f){
        var result = 666; //assume result comes from somewhere
        f(result); //Note: this is where your function is getting invoked.
    }
};

test.getID(function(result) {
    id = result;
});

console.log(id); //prints 666
查看更多
ら.Afraid
3楼-- · 2019-07-20 06:28

A closure would work for you as well:

var id,
test = {
  getID: function (id) {
    this.id = id;
  },
  id: -1
};

test.getID((function(result) {
    id=result;
    return id;
})(78));
console.log(id);
查看更多
登录 后发表回答