![](/img/trans.png)
[英]use global variable inside on google.maps.Geocoder().geocode() in typescript/javascript
[英]Javascript Closure with google.maps.Geocoder::geocode
我正在使用 google.maps javascript API v3。 我需要將一組公民地址轉換為帶有“點擊”偵聽器的谷歌 map 上的標記。 當用戶單擊 map 中的標記時,我希望另一個 window 打開與該地址相關的 url (另一個選項卡將是理想的)。
我無法保持地址和 url 之間的關系,因為我正在使用 javascript Closure 和谷歌方法 geocode()。
我有一組地址,例如
var addresses = [ '123 street street', '124 street street' ];
var urls = [ 'www.example.com/1', 'www.example.com/2' ];
然后我使用 API 對 map 進行地理編碼和創建標記
for (var i = 0; i<addresses.length; i++)
{
var address = addresses[i];
var url = urls[i];
geocoder.geocode(
{ 'address' : address },
function(result, status) {
var x = url // url == ""
var marker = new google.maps.Marker({
position: result[0].geometry.location,
map: map,
title:"Test"
});
google.maps.event.addListener(marker, 'click', function(event){
alert(url);
window.open(url);
},false);
}
}
在匿名 function 中,我該如何使用var url
?
似乎解決方案是將所有內容拆分為單獨的功能。
function showAddress() {
//geocoder = new Geocoder();
for (var i = 0; i<addresses.length; i++)
{
var address = addresses[i];
var url = urls[i];
findAddress(address,url);
pausecomp(400);
}
}
function findAddress(address,url)
{
geocoder.geocode(
{ 'address' : address },
function(result, status) {
var marker;
if(status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
position: result[0].geometry.location,
map: map,
title:"Longueuil"
});
}
attachUrl(marker, url);
}
);
}
function attachUrl(marker, url)
{
google.maps.event.addListener(marker, 'click', function(event){
alert(url);
window.open(url);
},false);
}
我的猜測是 function 調用會創建變量持有的值的持久副本,而不僅僅是指向它們的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.