如何从函数内部获取(facebook)变量

时间:2011-10-08 16:19:22

标签: javascript function variables facebook-graph-api

我想在另一个变量中使用函数外的response.id。这就是我似乎无法让它发挥作用。我尝试了至少12种其他方法。它始终是“未定义的”。

然而,当我取消注释函数内部的警报时,我会在弹出警报中看到response.id。

var a;  

function GetMyId() {  
    FB.api("/me",  
        function (response) {  
            a = response.id;  
            //return alert(response.id);  
            return;  
    });  
}  

a = GetMyId();  
alert(a);

1 个答案:

答案 0 :(得分:1)

仅限于将延续内置于回调函数中是您必须在Javascript中支付以便能够执行异步代码的代价。在你的例子中,你可以让原始函数继续执行其他请求,并且只要事件循环有空闲时间,FB响应后仍然可以正确调用回调。

关于这个回调内容的最重要注意事项是,遗憾的是,您必须以延续传递方式重写代码。这意味着你的(异步)函数(比如FB)永远不会返回一个值,而是在它们具有“返回”值时接收回调函数

function getMyId(callback){
    //instead of returning an id, pass it to a
    //continuation function when we finally get it

    PB.api("/me", function(response){
        callback(response.id);
    });
}

function main(){
    getMyId(function(id){
        console.log("I can get my id", id)
    });
}

这基本上等同于您可能更习惯的以下非cps代码(但在这种情况下不能使用)

function main(){
    var id = getMyId();
    console.log("i can get my id", id);
}

理论上的好奇心:函数参数也是变量。实际上,您可以通过滥用函数参数intead来使用var语句:)

var a = 17;
console.log('a is', a);

变为

 (function(a){
    console.log('a is', a);
 }(17));