Проблема с областью Javascript - PullRequest
2 голосов
/ 24 августа 2011

Я вызываю эту функцию, присваиваю результат переменной в обратном вызове и затем записываю результат, но я получаю неопределенное значение.

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

Если я изменю его на код ниже, томожно увидеть идентификатор в журнале.

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

Знаете ли вы, что я могу сделать, чтобы получить доступ к результату функции getID?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Функция getID должна вызвать свой параметр, прежде чем вы увидите id change.

Поскольку вы не предоставляете его реализацию, давайте предположим, что это что-то вроде этого. Обратите пристальное внимание на реализацию getID, она принимает функцию в качестве параметра f и затем вызывает ее. Это когда id будет установлен.

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
0 голосов
/ 24 августа 2011

A замыкание будет работать и для вас:

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

test.getID((function(result) {
    id=result;
    return id;
})(78));
console.log(id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...