Javascript如何为异步循环创建回调函数?它是每次都重新创建函数还是只创建一次并在它需要的每次迭代中使用相同的函数定义?我使用以下project将AngularJS用于多文件文件上传器。还有这个功能,它处理名为progress
的进度条。这是基本上传。没有任何花哨的事情发生。只是默认的回调函数:
$scope.uploads = {};
for (var i = 0; i < $files.length; i++) {
$scope.upload = $upload.upload({
url: '/storage/upload',
file: $files[i],
data: data
}).progress(function(e) {
$scope.uploads[i] = e.loaded / e.total;
}).success(function(data, status, headers, config) {
$scope.reload();
});
}
我还有另一个功能,现在只做console.log($scope.uploads)
。出于测试目的,我试图上传四个文件。这是我从日志中得到的:
对象 4:0.4744183257889485
对象 4:1
对象 4:0.4563747067454433
等。它基本上只更新$scope.uploads
的一个值,第四个值,经过一段时间的思考,我意识到Javascript与PHP具有相同的范围 - 如果在范围中定义了变量,则可以在范围外访问它。并且由于最后一个文件的索引是3,它会添加最后一个并结束循环,但变量仍然存在于类中,因此progress
函数只是不断更新最后一个i
而不是最初提供的那些。
如何将迭代变量分配给这些函数,因此即使在循环结束后,函数仍然使用在初始化期间首先分配的值。对象?