JavaScript 解析

标签 javascript

我有这段代码:

$(document).ready(function() {
    //<![CDATA[  
    var who;

    FB_RequireFeatures(["Api"], function(){ 

        var who = api.get_session().uid;
        alert(who);

        });

        alert("the uid is: "+who);

    //]]> 
});

问题: FB_RequireFeatures block 外部的代码先于其内部的代码执行。 因此 who 的值是未定义的。

我做错了什么?

最佳答案

FB_RequireFeatures 函数似乎正在进行异步调用,因此您没有做任何错误,这就是它的工作方式 - 在请求返回之前调用警报。

您的代码设计方式必须确保仅在请求完成后才调用依赖于 FB_RequireFeatures 函数结果的代码。您可以在回调中调用另一个函数,例如:

var who;

$(document).ready(function() {        
    FB_RequireFeatures(["Api"], function() {
        who = api.get_session().uid;
        doSomeOtherStuff();
    });
});

function doSomeOtherStuff() {
    alert("the uid is: " + who);
}

现在,仅在 FB_RequireFeatures 函数完成后才调用 doSomeOtherStuff 函数,并且您应该在 doSomeOtherStuff 函数内执行以下所有代码 - 这显然,您可以命名为任何您想要的名称。

我将 who 变量移出了 Ready block ,以使其保持在 doSomeOtherStuff 函数的范围内,并从内部函数,以便您引用原始变量而不是创建新变量,否则两者是相同的。

关于JavaScript 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172668/

相关文章:

javascript - 在 Internet Explorer 上卸载事件之前使用的正确方法?

JavaScript for HTML::我想将多个数据显示到每个表行的多个字段中

javascript - 将函数重新绑定(bind)到克隆元素

javascript - Twitter 按钮停止显示计数 0

javascript - Angular2 + Chart.js 和 ng2-charts。数据绑定(bind)未按预期工作

javascript - 如何使用或不使用 javascript 在数字之间添加垂直线?

javascript - 打印外部页面而不打开它

javascript - 在 CSS3 或 HTML5 中更改元素背景颜色的有效方法

javascript - 如何解析 form[0].submit 不是函数(...)

javascript - 在对象数组中搜索字符串