在做html5的上传,可以使fileReader的onload的时候,输出的i一直都是最后的值,而不是
0,1,2,3....n ,$('#' + opts.fileId).change(function () {
var files = document.getElementById(opts.fileId).files;
var i =0
for (i = 0; i < files.length; i++) {
var fRead = new FileReader();
fRead.onload = function (e){
console.log(i);
};
fRead.readAsDataURL(files[i]);
}
});
0,1,2,3....n ,$('#' + opts.fileId).change(function () {
var files = document.getElementById(opts.fileId).files;
var i =0
for (i = 0; i < files.length; i++) {
var fRead = new FileReader();
fRead.onload = function (e){
console.log(i);
};
fRead.readAsDataURL(files[i]);
}
});
return function (e){
console.log(_i);
}
})(i);
console.log(i);
};改成下面试试fRead.onload = function (index) {
return function () {
console.log(index);
};
}(i);
var func_arr = [];
for (var i = 0; i < 5; ++i) {
func_arr.push(function () {
console.log(i);
});
} for (var i in func_arr) {
func_arr[i]();
}
var func_arr = [];
for (var i = 0; i < 5; ++i) {
func_arr.push(function () {
console.log(i);
});
}
放在一个函数中,并在函数的最后返回产生的数组,就不行了,当执行这个函数数组里的函数时,
每次执行的结果就是相同的,因为产生了闭包。如:function createFunctions()
{
var funcArr = [];
for (var i = 0; i < 5; ++i) {
funcArr.push(function () {
console.log(i);
});
}
return funcArr;
}var func_arr =createFunctions();
for (var i in func_arr) {
func_arr[i]();
}
var fRead = new FileReader();
fRead["Index"] = i;
fRead.onload = function (e){
console.log(this["Index"]);
};