jQuery更改后变量未定义

时间:2011-07-22 20:16:30

标签: javascript jquery google-maps-api-3

var circle = new google.maps.Circle({
    center: latLng,
    radius: radius,
    strokeColor: "#FF0000",
    strokeOpacity: 0.5,
    strokeWeight: 1,
    fillColor: "#FF0000",
    fillOpacity: 0.2
});

circle.setMap(map);

map.fitBounds(circle.getBounds());

jQuery('#area').change(function() {
    radius = jQuery('#area').val();

    var newLatLng = marker.getPosition();

    circle.setMap(null);

    var circle = new google.maps.Circle({
        center: latLng,
        radius: radius,
        strokeColor: "#FF0000",
        strokeOpacity: 0.5,
        strokeWeight: 1,
        fillColor: "#FF0000",
        fillOpacity: 0.2
    });

    circle.setMap(map);

    map.fitBounds(circle.getBounds());
});

circle是在jQuery('#area').change()之外定义的,但是当我尝试从jQuery('#area').change()函数内部访问它时,我得到一个未定义的错误。这是为什么?

2 个答案:

答案 0 :(得分:3)

因为你的内部函数包含var circle。由于称为“var hoisting”的现象,整个函数将circle视为局部变量,即使var语句稍后出现。

将内部函数的圆圈命名为其他内容。

答案 1 :(得分:1)

在.change函数中,更改以下行:

var circle = new google.maps.Circle({

到此:

circle = new google.maps.Circle({

您拥有它的方式,您创建了一个名为circle的新局部变量并设置了它的值,而您没有设置circle全局定义的值。然后,当你下次进来并在全局一个上调用circle.setMap(null)时,它仍然是空的。

因此,如果您只想操作圆的全局定义,请在var函数中删除.change(),如上所述。如果您打算创建一个新的临时圈子对象,仅在该.change()函数期间使用,该函数在该函数执行后不会存在,则将该本地复制命名为circle以外的其他内容。