我创建了一个变量并尝试通过函数设置其值。但是这个值在该函数之外无法访问
<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 :(得分: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
。