javascript中的变量作用域

时间:2011-04-24 17:55:43

标签: javascript

我的代码如下:

jQuery(document).ready(function() {
        var pic = 0;
        FB.init({appId: '1355701231239404', status: true, cookie: true, xfbml: true});
        FB.getLoginStatus(function(response) {
        if (response.session) {
            pic = "http://graph.facebook.com/" + response.session.uid + "/picture";     
            alert(pic);
         } else {
            window.location = "index.php"
         }       
        });

    });
    </script>

问题是我的if语句中的pic与我上面声明的那个有不同的范围吗?为什么以及如何使它们相同?

我想要的是在我的html体内使用这个var pic(由if语句指定的那个)。我将在body中有另一个脚本,一个使用这个pic变量的document.write。截至目前,当我做一个document.write它总是给我0,好像它没有在if语句中分配

2 个答案:

答案 0 :(得分:3)

  

问题是我的if语句中的pic有不同的范围

不,不是。 JavaScript范围是按功能划分的。 var pic = 0;范围pic为传递给ready()的匿名函数。传递给getLoginStatus()的匿名函数根本不使用var,因此pic的范围也相同。

(既然你没有说出你得到了什么结果或者你期望得到什么结果,很难说你问题的解决方案实际上是什么)

答案 1 :(得分:1)

但该代码段中只有一个pic。所以你描述的问题不存在。你遇到了什么问题?与您的期望相比,代码是如何行为错误的?

<强>更新

好的,您的实际问题是您希望pic更新,以便您可以在其他位置使用它的值。但请考虑:

FB.getLoginStatus(function(response) { ... });

函数执行回调而不是返回response作为返回值的原因是因为它是异步的。获取响应需要一段时间,因此它不会立即执行回调。因此,在发生这种情况之前,即在使用值正确初始化pic之前,您的其他代码可能正在执行。