我正在尝试执行以下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
该函数已定义,我不确定是什么导致了这个问题:
答案 0 :(得分:3)
将字符串传递给setTimeout
时,会在全局范围内对其进行评估。由于getDetails
是在另一个函数中定义的(至少在你的JSFiddle链接上),它被称为onload
,因此在评估字符串时它超出了范围。
您需要将功能传递给setTimeout
。这将创建一个闭包并保留范围。
function delayed_function() {
getDetails(services[nextAddress].place_id, theNext);
}
setTimeout(delayed_function, delay);