Javascript scope problem

2019-07-20 05:46发布

问题:

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?

回答1:

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


回答2:

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);