Javascript 需要访问函数中定义的变量。嵌套循环是解决方案吗?
我有下面的代码,需要访问变量“密度”,并将其放在弹出窗口中。密度是在mapCities函数中定义的,但我添加的标记和创建的弹出窗口是在mapCities函数外部的for循环中创建的,这会导致ReferenceError:未定义密度 index.html:151:42。这是预期的错误。我只是不知道如何访问密度变量。它应该是带有嵌套循环的doe吗Javascript 需要访问函数中定义的变量。嵌套循环是解决方案吗?,javascript,function,for-loop,var,Javascript,Function,For Loop,Var,我有下面的代码,需要访问变量“密度”,并将其放在弹出窗口中。密度是在mapCities函数中定义的,但我添加的标记和创建的弹出窗口是在mapCities函数外部的for循环中创建的,这会导致ReferenceError:未定义密度 index.html:151:42。这是预期的错误。我只是不知道如何访问密度变量。它应该是带有嵌套循环的doe吗 function mapCities(units) { for (var i = 0; i &
function mapCities(units) {
for (var i = 0; i < cities.length; i++) {
var cityName = cities[i];
var cityNumPeeps = cityPops[i];
var cityZone = cityAreas[i];
var cityXY = cityCoords[i];
var density = calcPopDensity(cityNumPeeps, cityZone, units); // call calcPopDensity passing population, cityZone and units as arguments
console.log(density);
}
};
function calcPopDensity(cityNumPeeps, cityZone, units) {
if (units == "miles") {
return cityNumPeeps / cityZone // calculate population density in miles and return it
} else if (units == "km") {
return cityNumPeeps / cityZone * 1.60934 // calculate population density in miles and return it
}
};
for (var i = 0; i < cities.length; i++) {
var cityName = cities[i];
var cityNumPeeps = cityPops[i];
var cityZone = cityAreas[i];
var cityXY = cityCoords[i];
var popup = `<b>${cityName}</b><br>
<b>population</b>: ${density}<br>`
L.marker(cityXY).addTo(map) // add marker to map based on cityCoords array and bind to popup
.bindPopup(popup);
console.log(popup)
//if statement determines units to place in popup text
if (units == "miles") {
popup += `miles`; // add text if if var density returns miles
} else if (units == "km")
popup += `kilometers`; // add text if if var density returns kilometers
L.marker(cityXY).addTo(map) // add popup again based on if statement
.bindPopup(popup);
console.log(popup)
}
```
函数映射城市(单位){
对于(变量i=0;i
人口:${density}
`
L.marker(cityXY).addTo(map)//基于cityCoords数组将标记添加到地图并绑定到弹出窗口
.bindPopup(弹出窗口);
控制台日志(弹出窗口)
//if语句确定要放置在弹出文本中的单位
如果(单位=“英里”){
popup+=`miles`;//如果var density返回miles,则添加文本
}否则,如果(单位=“km”)
popup+=`km`;//如果var density返回km,则添加文本
L.marker(cityXY).addTo(map)//根据if语句再次添加弹出窗口
.bindPopup(弹出窗口);
控制台日志(弹出窗口)
}
```
只需在需要时为for循环的局部密度创建一个变量即可。
上面的密度变量超出范围,因此无法按原样使用
for (var i = 0; i < cities.length; i++) {
var cityName = cities[i];
var cityNumPeeps = cityPops[i];
var cityZone = cityAreas[i];
var cityXY = cityCoords[i];
var density = calcPopDensity(cityNumPeeps, cityZone, units);
var popup = `<b>${cityName}</b><br>
<b>population</b>: ${density}<br>`
L.marker(cityXY).addTo(map) // add marker to map based on cityCoords array and bind to popup
.bindPopup(popup);
console.log(popup)
//if statement determines units to place in popup text
if (units == "miles") {
popup += `miles`; // add text if if var density returns miles
} else if (units == "km")
popup += `kilometers`; // add text if if var density returns kilometers
L.marker(cityXY).addTo(map) // add popup again based on if statement
.bindPopup(popup);
console.log(popup)
}
for(变量i=0;i
人口:${density}
`
L.marker(cityXY).addTo(map)//基于cityCoords数组将标记添加到地图并绑定到弹出窗口
.bindPopup(弹出窗口);
控制台日志(弹出窗口)
//if语句确定要放置在弹出文本中的单位
如果(单位=“英里”){
popup+=`miles`;//如果var density返回miles,则添加文本
}否则,如果(单位=“km”)
popup+=`km`;//如果var density返回km,则添加文本
L.marker(cityXY).addTo(map)//根据if语句再次添加弹出窗口
.bindPopup(弹出窗口);
控制台日志(弹出窗口)
}
您能再添加一些代码吗?您的问题不清楚,例如我看不到mapCities
在何处定义或被称为dupdated@phainix。仍然习惯于在这里格式化代码。检查并确认@florian的答案是否解决了您的问题,如果解决了,请将其标记为答案,如果不在必要时发表评论。这是可行的,但现在units变量未定义并引发错误。我需要输入单位,以便在弹出窗口中正确记录密度。@phainix我不清楚如何从提示输入中访问单位,其中单位输入为“英里”或“公里”?定义var单位时=提示;“我的密度”不会引发错误,但未定义。