我是Javascript的新手,以下代码让我感到困惑。根据我的理解,您可以通过删除前面的var来为全局变量赋值,并且在首先声明全局时不需要定义任何初始值。但是,为什么以下代码不起作用? (通过不工作我的意思是在main()中调用document.write为“ulat”吐出“undefined”。
var ulat;
function write(latitude) {
ulat = latitude;
document.write("<h1> This works:" + ulat + "</h1>");
}
function getloc() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position) {
write(position.coords.latitude);
},
function (error) {
switch(error.code) {
case error.TIMEOUT:
alert ('Timeout');
break;
case error.POSITION_UNAVAILABLE:
alert ('Position unavailable');
break;
case error.PERMISSION_DENIED:
alert ('Permission denied');
break;
case error.UNKNOWN_ERROR:
alert ('Unknown error');
break;
}
});
}
else {
alert("Geolocation is not supported by your web browser.");
}
}
function main() {
getloc();
document.write("<h1> This doesn't work: " + ulat + "</h1>");
}
有任何帮助吗?谢谢!
答案 0 :(得分:4)
getCurrentPosition
是异步。当你调用它时它不会运行,当你调用它时启动运行。因此,当main
检查值时,尚未调用成功回调,并且未向ulat
分配任何内容。
所以这就是你的代码所做的:
main
被称为main
来电getloc
getloc
看到地理位置可用且启动地理定位请求。然后立即返回。main
输出ulat
的值,该值仍为undefined
。success
回调(或者,当然,失败)会被调用。在那一点上,我有点惊讶你的页面不会变成空白,因为你将在主解析后调用document.write
,这意味着document.open
,它会删除页面和从一块空白的石板开始。但我不经常使用document.write
来记住所有的变幻莫测...... 答案 1 :(得分:0)
你需要打电话给main: '主();'
答案 2 :(得分:-1)
var
用于局部变量。对于全局变量,仅提供引用或window.reference
。尝试修改代码以删除第一行var ulat;
。