Javascript范围问题

时间:2011-08-23 20:40:31

标签: javascript scope

我正在调用此函数,将结果分配给回调中的变量,然后记录结果,但我一直未定义。

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

如果我将其更改为下面的代码,那么我可以看到记录的ID。

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

您知道我能做些什么来访问getID函数的结果吗?

2 个答案:

答案 0 :(得分:1)

getID函数需要先调用其参数,然后才能看到id更改。

由于你没有提供它的实现,我们假设它是这样的。密切关注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

答案 1 :(得分:0)

closure对您也有用:

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

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