回调中的Javascript变量值将在关闭时重置

时间:2016-10-04 18:25:01

标签: javascript closures ecmascript-5 asynccallback

我正在尝试重构的ES5 JavaScript模块的某些部分遇到一种非常奇怪的行为。

正如我在JavaScript中所知,当异步回调使用存在于父函数作用域中的变量(定义回调的作用域)时,变量的值将成为回调时该变量的变量的最新值正在执行。但是在下面的代码中,变量pageNum每次运行时都会设置为0。在代码中,它试图从硬盘逐个捕获页面。页面上传后,会显示索引以通知上传了哪个页面。

请查看以下代码:

this.nextPageIndex = 1;
function capturePage(pageNum) {
  //Lots of things being done....
  function statusUpdate() {
    console.log(pageNum + "is being uploaded...");
  }
  captureSinglePage(statusUpdate);
}

function captureSinglePage(statuscallBack) {
  if (capture job running) { // when async job is running call statuscallBack() to send status of page capture
    statuscallBack();
  } else if (page capture job done) { // when async job is done
    singlePageCaptured();
  }
}

function singlePageCaptured() {
  //check if all pages are captured, if not
  capturePage(this.nextPageIndex++);
}

现在在页面数组的第0个元素上调用capturePage。 即使上传下一页,它也会打印"0 is being uploaded"。 它不应该打印正确的pageIndexes吗?

如果我需要澄清更多内容,请告诉我。

0 个答案:

没有答案