繁体   English   中英

Javascript:匿名函数,访问全局变量

[英]Javascript : Anonymous function, access to global variables

经过数小时的搜索,我的下面的代码有问题。 实际上,我离答案不远,但是我仍然受阻……

我有一个在循环内调用的匿名函数,我想访问和刷新全局变量,但是我尝试使用window.myvariable和另一个函数,但没有任何反应……

这是我的代码:

for (var i = 0; i < SHP_files.length; i++) {
            shapefile = new Shapefile({
                shp: "shp/polygon/"+SHP_files[i]+".shp",
                dbf: "shp/polygon/"+SHP_files[i]+".dbf",
                }, function(data) {

                    polygon_layer.addLayer(new L.GeoJSON(data.geojson,{onEachFeature: onEachFeature, style: polygonStyle}));
                    polygon_layer.addTo(map);
                    console.log(polygon_layer.getLayers()); // IS OK
                });
        };
        console.log(polygon_layer.getLayers()); // IS EMPTY !!

那么,我如何才能转换此匿名函数,以使我可以从遵循其的代码中访问某些内容?

非常感谢,对不起,我的英语不太好……

这是异步代码执行的典型问题。 您的示例代码不会从上到下执行。 特别是,在Shapefile完成其所做的任何操作之前,您的匿名函数不会执行。 同时,您的JS将按顺序执行。 因此,以上代码的最后一行可能会在匿名函数之前执行。

要解决此问题,您将需要从其回调中触发任何依赖于Shapefile响应的代码:

for (var i = 0; i < SHP_files.length; i++) {
    shapefile = new Shapefile({
        shp: "shp/polygon/"+SHP_files[i]+".shp",
        dbf: "shp/polygon/"+SHP_files[i]+".dbf",
        }, function(data) {
            polygon_layer.addLayer(new L.GeoJSON(data.geojson,{onEachFeature: onEachFeature, style: polygonStyle}));
            polygon_layer.addTo(map);
            executeMoreCode();
        });
};

function executeMoreCode() {
    console.log(polygon_layer.getLayers()); // IS OK
}

尝试在for循环或函数外部定义变量,在这种情况下为polygon_layer。 请参见以下示例:

var f;
for(var i=0; i<5;i++){
    (function(){
        f = 10;
        console.log(f); // Outputs 10
    })();
}
console.log(f); // Also outputs 10

暂无
暂无

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

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