无法在回调函数中更改变量值

时间:2014-08-05 18:10:11

标签: javascript callback scope

我有以下代码:

var sLat = "test"; //global var, set outside any function

...

geocoder.geocode({
    'address': address
}, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        alert(sLat); //SHOWS test, THATS OK
        sLat = "test2"; //TRYING TO CHANGE ITS VALUE
    } else {
        alert('Geocode was not successful for the following reason: ' + status);
    }
});
alert(sLat); // SHOWS test INSTEAD OF test2

问题是var在回调函数中是可访问的,但是当我尝试更改其值时,不会保存新值("test2")。问题是什么?

1 个答案:

答案 0 :(得分:1)

您实际上正在更改变量,但是当您在回调中执行此操作时,此过程是异步的,因此在回调中的代码被执行之前,最后一行已经完成。

你必须做出一个承诺,所以在排除其余代码之前它等待回调。

看看这个例子:

Promise & Deferred Objects in Javascript