2

我创建了一个变量并尝试通过函数设置它的值。但是这个值在那个函数之外是不可访问的

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

3 回答 3

3

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

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

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

于 2012-04-24T07:24:21.293 回答
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>
于 2012-04-24T07:32:43.143 回答
1

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

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

undefined第一个警报将显示 1,第二个将显示 2。因此,无论何时调用回调,代码中的第二个警报都会始终显示。

于 2012-04-24T07:24:50.700 回答