我正在尝试重构的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吗?
如果我需要澄清更多内容,请告诉我。