如何解决Javascript作用域问题。答案是什么?
我有一个函数如何解决Javascript作用域问题。答案是什么?,javascript,jquery,function,google-maps,closures,Javascript,Jquery,Function,Google Maps,Closures,我有一个函数 function getCustomAddress() { alert(results[i].formatted_address) } 警报(结果[i]。格式化的\u地址)在另一个函数中定义。这显然意味着它在getCustomAddress中未定义,因此如何解决此问题并警告这些值。我还摆好了小提琴 您可以将其作为函数参数传递 function getCustomAddress(result) { alert(result.formatted_address) }
function getCustomAddress() {
alert(results[i].formatted_address)
}
警报(结果[i]。格式化的\u地址)
在另一个函数中定义。这显然意味着它在getCustomAddress中未定义,因此如何解决此问题并警告这些值。我还摆好了小提琴
您可以将其作为函数参数传递
function getCustomAddress(result) {
alert(result.formatted_address)
}
因此,调用函数时,需要提供一个参数:
getCustomAddress(结果[i]);例如您可以使用函数创建一个私有范围,并在其中定义所有全局变量:
(function(){
var results = [];
function getCustomerAdress(){
//... call result etс
}
function set result(){
//... set result etc
}
// some code for initialization, setting onload handlers etc
})();
我检查了JSFIDLE,结果作为ajax请求获取。 您需要将结果存储在具有全局作用域的变量中,然后设置获取结果的超时。您还可以在geocoder请求结束之前执行函数,并将结果变量传递给它
geocoder.geocode(geocoderRequest, function (results, status) {
// execute your function here. getCustomAddress(result)
}
检查我所做的更改。
代码更改摘要
var _results;
function initialize() {
.
.
.
google.maps.event.addListener(marker, 'dragend', function (e) {
getAddress(e.latLng);
setTimeout('getCustomAddress(0);', 500);
})
function getAddress(latLng) {
if (!geocoder) {
geocoder = new google.maps.Geocoder();
}
var geocoderRequest = {
latLng: latLng
}
geocoder.geocode(geocoderRequest, function (results, status) {
_results = results;
.
.
.
function getCustomAddress(i) {
alert(_results[i].formatted_address)
}
您可能希望创建一个for循环来提醒所有结果,而不是在getCustomAddress函数中传递结果id。如果发布一个JSFIDLE示例,请发布一个好的示例。您希望我如何编辑fiffle,是否不清楚?由于回调的性质,它无法通过分离脚本和标记猜测来让它工作。