2016-03-31 2 views
1

Я пытаюсь выполнить следующий код JavaScript, но я получаю ошибку.Uncaught ReferenceError: getDetails не определен

var services = [{place_id:'okkkkkk'}]; 
var delay = 100; 
var nextAddress = 0; 

function theNext() { 
    if (nextAddress < services.length) { 
    setTimeout('getDetails("' + services[nextAddress].place_id + '", theNext)', delay); 
    nextAddress++; 
    } else { 

    } 
} 


function getDetails(address, next) { 
    alert('ok'); 
} 


theNext(); 

Errror:

VM687:1 Uncaught ReferenceError: getDetails is not defined

Функция определена, и я не уверен, что причиняет проблему:

https://jsfiddle.net/qmnaykqw/

+0

Протестировано так же, как и в моей консоли, оно работает нормально. –

+0

Ничего себе !! Я не уверен, кто так быстро откладывает ответы! – user1012181

+0

Что ответил Квентин +, вам нужно поместить 'nextAddress ++;' также в функцию времени, теперь счетчик сразу увеличивается и будет '1' в момент выполнения функции времени. – Teemu

ответ

3

Когда вы передаете строку setTimeout он получает оцененную в глобальном масштабе. Поскольку getDetails определен в другой функции (по крайней мере, на вашей ссылке JSFiddle), которая называется onload, она выходит за пределы области, когда оценивается строка.

Необходимо вместо этого передать функцию setTimeout. Это создаст закрытие и сохранит масштаб.

function delayed_function() { 
    getDetails(services[nextAddress].place_id, theNext); 
} 

setTimeout(delayed_function, delay); 
+0

Можете ли вы посмотреть на сценарий здесь: http://acleach.me.uk/gmaps/v3/plotaddresses.htm Похоже, этот парень заработал:/ – user1012181

+0

@ user1012181 - В отличие от вашей версии JSFiddle, этот код не оберните код в другую функцию, которая назначается как обработчик события загрузки. – Quentin

+0

Извините, я не понял. Можете ли вы объяснить этот бит кода? :/ – user1012181

Смежные вопросы