JavaScript函数未设置变量值

时间:2012-04-24 07:20:51

标签: function 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>

3 个答案:

答案 0 :(得分:3)

第一个警报有效,因为它是在您传递给getProfiles回调函数设置的值之后。

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

另外,只是旁注:pId是您传递给jQuery的ready事件的函数的本地,它不是全局变量。

答案 1 :(得分: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>

答案 2 :(得分:1)

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

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

第一个警报将显示1,第二个警告将显示2.因此,无论何时回拨,代码中的第二个警报将始终显示undefined