简体   繁体   English

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

[英]How do I read a variable from another function?

In the following code, it seems that the function initialize(), once triggered by socket.on('results') is unable to read the value of "array". 在下面的代码中,似乎函数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();
        });

Simple pass the array as a parameter when you call the initialize function. 调用初始化函数时,只需将数组作为参数传递即可。

initialize(array);

Them, in the function initialize: 在函数中初始化它们:

function initialize(array) {REST OF THE CODE}

All 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);
        });

array variable is not visible inside initialize function. 数组变量在初始化函数中不可见。 It is closured in callback anonymous function. 它在回调匿名函数中关闭。 I propose to pass array as argument: 我建议将数组作为参数传递:

 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); }); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM