如何从另一个函数读取变量

How do I read a variable from another function?

本文关键字:读取 变量 函数 另一个      更新时间:2023-09-26

在下面的代码中,函数initialize()一旦由socket.on('results')触发,就无法读取"array"的值。

block content
    script.
        function initialize() {
            var mapOptions = {
                center: { lat: -30, lng: 150},
            };
            var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            setMarkers(map, array);
        }
        function setMarkers(map, locations) {
            for (var i = 0; i < locations.length; i++) {
                var location = locations[i];
                var myLatLng = new google.maps.LatLng(location[1], location[2]);
                var marker = new google.maps.Marker({
                    position: myLatLng,
                    map: map,
                    title: location[0]
                });
            }
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    div(id="map-canvas")
    script.
        var socket = io.connect('http://localhost:4000');
        socket.on('results', function(results) {
            var array = [];
            results.forEach(function(item){
                name = item.name;
                coordinates = item.location.coordinate;
                array.push([name, coordinates.latitude, coordinates.longitude]);
            });
            initialize();
        });

调用初始化函数时将数组作为参数简单传递。

initialize(array);

它们,在函数中初始化:

function initialize(array) {REST OF THE CODE}

所有代码:

block content
    script.
        function initialize(array) {
            var mapOptions = {
                center: { lat: -30, lng: 150},
            };
            var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            array = array || [];
            setMarkers(map, array);
        }
        function setMarkers(map, locations) {
            for (var i = 0; i < locations.length; i++) {
                var location = locations[i];
                var myLatLng = new google.maps.LatLng(location[1], location[2]);
                var marker = new google.maps.Marker({
                    position: myLatLng,
                    map: map,
                    title: location[0]
                });
            }
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    div(id="map-canvas")
    script.
        var socket = io.connect('http://localhost:4000');
        socket.on('results', function(results) {
            var array = [];
            results.forEach(function(item){
                name = item.name;
                coordinates = item.location.coordinate;
                array.push([name, coordinates.latitude, coordinates.longitude]);
            });
            initialize(array);
        });

数组变量在初始化函数中不可见。它在回调匿名函数中关闭。我建议将数组作为参数传递:

block content
    script.
        function initialize(array) {
            var mapOptions = {
                center: { lat: -30, lng: 150},
            };
            var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            array = array || [];
            setMarkers(map, array);
        }
        function setMarkers(map, locations) {
            for (var i = 0; i < locations.length; i++) {
                var location = locations[i];
                var myLatLng = new google.maps.LatLng(location[1], location[2]);
                var marker = new google.maps.Marker({
                    position: myLatLng,
                    map: map,
                    title: location[0]
                });
            }
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    div(id="map-canvas")
    script.
        var socket = io.connect('http://localhost:4000');
        socket.on('results', function(results) {
            var array = [];
            results.forEach(function(item){
                name = item.name;
                coordinates = item.location.coordinate;
                array.push([name, coordinates.latitude, coordinates.longitude]);
            });
            initialize(array);
        });