在函数内的函数中分配隐藏变量

时间:2013-04-01 22:56:52

标签: javascript function google-maps-api-3 pass-by-reference hidden-variables

我有类似下面的javascript代码,但是当我尝试在foo()中使用'myVar'时,它的值是未定义的。我也试过将变量传递给bar()并直接赋值,但不会通过引用传递。

function foo() { 
   bar();
   var myVar = document.getElementById('coords').value;
   // myVar should now be (40.7143528, -74.0059731)
   alert(myVar); // returns blank

   var request = {
    location: myVar,
    radius: 500,
    types: [type] //previously defined 
   };

   //Then send a search request to Google...
}

function bar() {
   geocoder.geocode( {'address':address}, function(results, status) {

      document.getElementById('coords').value = results[0].geometry.location;
      // Let's say the location is NYC (40.7143528, -74.0059731)

     alert(document.getElementById('coords').value); //returns the correct value
     // however, this pops up after the pop up in function foo() 

   });
}

使用以下HTML

<input type="hidden" id="coords" name="coords"/>

真正的代码是使用谷歌地图API,如果这有所不同:

2 个答案:

答案 0 :(得分:1)

<强> jsfiddle Demo

对我来说运行正常。确保在定义函数时在定义前面实际使用function

function foo() { 
 bar();
 var myVar = document.getElementById('coords').value;
}

function bar() {
 document.getElementById('coords').value = 4;
}

foo();

答案 1 :(得分:1)

bar异步运行,因为geocoder会这样做。这意味着

document.getElementById('coords').value = results[0].geometry.location;

实际上在

之后执行
var myVar = document.getElementById('coords').value;

你不能这样使用ajax。所有依赖results / status的工作都必须在回调中完成。