javascript - 变量传递不起作用 - 值未定义

标签 javascript html variables geolocation w3c-geolocation

我有一个严重的问题,我已经尝试调试了几天了。 我有一个脚本可以获取用户当前的纬度和经度,然后将它们存储在变量中。但是,当我尝试在该函数之外和//init map 区域中使用这些变量时, map 没有显示。通过警告变量,我可以看到位置函数之外的变量被设置为“未定义”。这是我的代码:

//main function here
function initialize() {
var lat;
var lon;

//check if user has geo feature
if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(
//get position
function(position){
    lat = position.coords.latitude;
    lon = position.coords.longitude;
    },
// if there was an error
function(error){
    alert('ouch');
});
}
//case the users browser doesn't support geolocations
else {
alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
}
//init map
var myOptions = {
    center: new google.maps.LatLng(lat, lon),
    zoom: 16,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };
var map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);

}

感谢您的帮助,Ariel

最佳答案

那是因为您在函数中声明了变量。这些变量对 initialize 是私有(private)的函数,并且只能从其内部访问。如果您需要能够在初始化函数之外访问变量,请将变量声明移出函数。

var lat;
var lon;
function initialize() {
...

看看这个 MDN article关于 JavaScript 中的变量作用域。

更新

再次查看代码,我意识到问题不在于变量作用域,而是被缩进搞糊涂了。我不熟悉 Geolocation API,但我相信问题可能是 navigator.geolocation.getCurrentPosition()是异步的,因为它必须等待用户允许网站获取设备的位置。因此myOptions将在检索实际位置之前分配 - 因此 lat & lngmyOptions 时仍然未定义已分配。

试试这个:

//main function here
function initialize() {
var lat, lon, map, myOptions;

//check if user has geo feature
if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(
//get position
function(position){
    lat = position.coords.latitude;
    lon = position.coords.longitude;

    //init map
    myOptions = {
       center: new google.maps.LatLng(lat, lon),
       zoom: 16,
       mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
},
// if there was an error
function(error){
    alert('ouch');
});
}
//case the users browser doesn't support geolocations
else {
alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
}
}

关于javascript - 变量传递不起作用 - 值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638066/

相关文章:

javascript - 带有选择和输入的 jQuery/Javascript 表过滤器

javascript - 当我点击删除链接时,我的 Ajax 功能不起作用,但适用于编辑链接

html - 如何根据屏幕尺寸对齐图片和文字?

html - 导航不会触及屏幕底部

IOS:如何使变量成为全局变量

CSS 样式表中的 PHP 变量

javascript - 尝试在 Node.js 中提供 png : Cannot read property 'end' of undefined

jquery - 有没有办法让页面中所有的onclick事件都成为光标指针?

php - 如何从 Laravel 上的 MessageSent 事件访问邮件数据?

javascript - 当我将 div 附加到现有 div 时出现无限循环?