Javascript在匿名函数中分配变量的值
Javascript assign value of variable inside anonymous function
我正在尝试为OpenLayers创建几个层。我循环遍历数组,并使用typename: 'Test:' + item.ServiceName
为每个值分配值。问题是当OpenLayer调用函数时,它会获取项的最后一个赋值。ServiceName始终为"Test_Layer_3",因此不使用Test_Layer_1和Test_Layel_2。
如何更改它,以便将Test_Layer_1、Test_Layel_2和Test_Layer_3分配给typename?
var _MyLayers = [];
_MyLayers.push({ "Id": 0, "ServiceName": "Test_Layer_1" });
_MyLayers.push({ "Id": 1, "ServiceName": "Test_Layer_2" });
_MyLayers.push({ "Id": 2, "ServiceName": "Test_Layer_3" });
for (var i = 0; i < _MyLayers.length; i++)
{
var item = _MyLayers[i];
var sourceVector = new ol.source.Vector({
loader: function (extent)
{
$.ajax('http://localhost/geoserver/wfs', {
type: 'GET',
data: {
service: 'WFS',
version: '1.1.0',
request: 'GetFeature',
typename: 'Test:' + item.ServiceName,
srsname: 'EPSG:3857',
outputFormat: 'application/json',
bbox: extent.join(',') + ',EPSG:3857'
}
});
},
strategy: ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({})),
});
var layerVector = new ol.layer.Vector({
source: sourceVector,
minResolution: 0,
maxResolution: 2,
style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: "rgba(25, 163, 255, 1.5)", width: 1 }) })
});
_MapLayers.push(layerVector);
}
它应该通过用_MyLayers[i].ServiceName
替换item.ServiceName
来工作
解释
定义loader
函数时,并不意味着item.ServiceName
此时已分配给typename
。相反,该函数维护一个到item
变量的链接(有点),然后链接回_MyLayers[i]
的值——一个全局值。
当OpenLayers为每个对象调用loader
函数时,'Test:' + item.ServiceName,
被评估并分配给typename
,其中item
表示的值已经改变。它现在将指向最后一个项目(例如_MyLayers[3]
),因为它是分配给item
的最后一个值。
通过替换上面的行,loader
函数现在每个都保持直接到全局_MyLayers
的唯一链接。由于i
是一个数字,每个加载器函数都会根据for
循环中定义函数时i
的值来实现一个语句(例如_MyLayers[1]
、_MyLayers[2]
…等等)。
我最终将item.ServiceName
的值分配给了sourceVector。然后在loader函数中读取sourceVector的值。
- 在运行时使用预先确定的对象分配变量
- 重新分配变量和重新定义之间的性能差异
- Javascript:在对象中分配变量时命名函数的好处
- Angularjs 控制器在服务方法返回之前从服务中分配变量
- 在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
- 按设置的数量拆分字符串,并为拆分分配变量
- 嵌套的 if/else 语句讨论了分配变量.我已经这样做了,但它仍然不起作用
- 有没有理由不在 while 块声明中分配变量
- JSON - 访问 JSON 数组并分配变量
- Angular2 火力基地检索并分配变量
- 是否可以在运行依赖项之前在 gulp 任务中分配变量
- 在 JS 中的 for 循环中重新分配变量是什么意思
- 使用多种组合分配变量的最佳方法是什么
- 使用函数从字符串中分配变量名称
- 如何调用chrome.storage.sync.get并在页面加载时分配变量
- 在JavaScript中用冒号分配变量的语法有效吗
- 带有单选按钮的If语句不分配变量
- 正在从内部回调中分配变量
- Javascript在匿名函数中分配变量的值
- 使用jQuery分配变量类型时出错