未捕获的ReferenceError:未定义getDetails

时间:2016-03-31 17:54:42

标签: javascript

我正在尝试执行以下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/

1 个答案:

答案 0 :(得分:3)

将字符串传递给setTimeout时,会在全局范围内对其进行评估。由于getDetails是在另一个函数中定义的(至少在你的JSFiddle链接上),它被称为onload,因此在评估字符串时它超出了范围。

您需要将功能传递给setTimeout。这将创建一个闭包并保留范围。

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

setTimeout(delayed_function, delay);