javascript中定义的全局变量再次变为未定义

时间:2013-02-19 18:20:31

标签: javascript

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8" />
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&region=vi&language=vi">    
    </script>

    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        var map;
    </script>
    <style type="text/css">
        html {
            height: 100%;
        }

        body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body onload="initialize()">
    <div id="map_canvas" style="width: 100%; height: 100%"></div>

    <script type="text/javascript">
        function initialize() {
            var mapOptions = {
                center: new google.maps.LatLng(10.79, 826.694),
                zoom: 13,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"),
                mapOptions);
        }
    </script>    

    <script>            
        alert(map);
    </script>

</body>
</html>

我的一些函数需要使用map变量,但是,我一直收到抱怨map变量未识别的警报。 如何让浏览器记住地图是在map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);上定义的 谢谢

3 个答案:

答案 0 :(得分:3)

那是因为你在onLoad上调用了函数initialize(),这意味着在onLoad上分配了map-variable。 但脚本

<script>            
    alert(map);
</script>
在触发onLoad之前调用

尝试:

<script type="text/javascript">
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(10.79, 826.694),
            zoom: 13,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"),
            mapOptions);


        alert(map);
    }

</script>

答案 1 :(得分:2)

由于

<script>            
    alert(map);
</script>

之前被解雇
onload="initialize()"

被调用。

答案 2 :(得分:1)

map运行时,

undefined将为alert()。这是因为alert()将在initialize()方法之前执行。

正文中的

<script>标记将立即运行,但您指定的onload函数将在所有正文标记内容(及其中的脚本)被解析并执行之后才会运行。

因此,一旦initialize()被调用,此设置将按您的需要运行,全局变量map将随处可用。