2012-04-24 202 views
2

我创建了一个变量并尝试通过函数设置其值。但在无法访问这个值函数变量值未由JavaScript设置函数

<script type="text/javascript"> 
$(document).ready(function() { 
    var pId; 
    getProfiles(id,function(b) 
    { 
     pId=b; 
     alert(pId); // It works fine... 
     }); 
    alert(pId); // undefined... 
    }); 
</script> 
+0

你错了pId在这里不是全球性的。你必须在$(document).ready()函数外声明它。 – 2012-04-24 07:28:42

回答

3

第一个提醒外工作,因为它的价值是通过你传递到getProfiles回调功能设置之后。

代码示例中的第二条警告仍显示值“undefined”,因为您传递给getProfiles的回调函数尚未执行。

此外,只是一个附注:pId是您传递给jQuery准备事件的函数的本地函数,它不是全局变量。

1

当您在pId中分配新值时,没有在全局范围内声明的声明变量pId。但是你有一个本地pId变量。因此,当您在回拨中呼叫警报时,它会显示GLOBAL pId的值,而您的第二个警报显示您的本地pId值。

function f() { d = 2; }; 
function a() { 
    var d = 1; 
    f(); 
    alert(d); 
} 
a(); 
alert(d); 

第一个警报将显示1和第二将显示2.在你的代码,以便第二警报将始终显示undefined不管叫回调的时候。

2

您声明pId但您没有为其分配任何值,因此默认情况下为undefined,则会评估同一范围内的警报,并打印'undefined'。 匿名函数是由getProfiles()(可能是异步)调用的回调函数,并且您不能假定在外部alert被调用之前它将被调用。

<script type="text/javascript"> 
$(document).ready(function() { 
    /* You declare it but you don't assign any value to it... 
    * so by default is undefined 
    */ 
    var pId; 
    getProfiles(id,function(b) 
    { 
     pId=b; 
     alert(pId); // This is called only once your anonymous callback is called... 
     }); 
    alert(pId); // Alerts 'undefined' 
    }); 
</script>