如何解决Javascript范围问题。关闭的答案是?
问题描述:
我有一个函数如何解决Javascript范围问题。关闭的答案是?
function getCustomAddress() {
alert(results[i].formatted_address)
}
alert(results[i].formatted_address)
在另一个函数定义。这显然意味着它在getCustomAddress中是未定义的,那么如何解决这个问题并提醒这些值。我也设置了一个小提琴。
答
你可以只把它作为一个函数参数
function getCustomAddress(result) {
alert(result.formatted_address)
}
所以当你打电话,你需要提供一个参数功能: getCustomAddress(结果[1]);例如
答
你可以创建一个功能的私人范围和定义的全局变量有:
(function(){
var results = [];
function getCustomerAdress(){
//... call result etс
}
function set result(){
//... set result etc
}
// some code for initialization, setting onload handlers etc
})();
答
我签出的jsfiddle,结果被取出作为一个Ajax请求。 您需要将结果存储在具有全局范围的变量中,然后设置超时以获取结果。您还可以在地理编码器请求结束之前执行您的函数,并将结果变量传递给它。
geocoder.geocode(geocoderRequest, function (results, status) {
// execute your function here. getCustomAddress(result)
}
检查我所做的更改。 http://jsfiddle.net/KEdrq/7/
代码更改摘要。
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循环,以提醒所有的结果而不是传递结果ID在getCustomAddress功能。
如果您发布jsfiddle示例发布一个好的。 – elclanrs 2013-04-06 06:28:03
你是如何让我编辑一个小丑的,是不是很清楚?它不能通过分离脚本和标记猜测来实现它,因为回调本质。 – Mike 2013-04-06 06:31:44