我正在尝试执行以下JavaScript
代码,但出现错误。
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();
错误:
VM687:1未捕获的ReferenceError:未定义getDetails
该函数已定义,我不确定是什么导致了该问题:
https://jsfiddle.net/qmnaykqw/
最佳答案
当您将字符串传递给setTimeout
时,它将在全局范围内进行评估。由于getDetails
是在另一个函数(至少在您的JSFiddle链接中)(称为onload
)中定义的,因此在评估字符串时,它不在范围内。
您需要将函数传递给setTimeout
。这将创建一个闭包并保留范围。
function delayed_function() {
getDetails(services[nextAddress].place_id, theNext);
}
setTimeout(delayed_function, delay);