日期:2014-05-16  浏览次数:20379 次

JS 变量作用域问题
在做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]);

                    
                 }
                 
             });


------解决方案--------------------
fRead.onload =(function(_i){
    return  function (e){
                        console.log(_i);
                  }
})(i);
------解决方案--------------------
fRead.onload = function (e) {
    console.log(i);
};

改成下面试试

fRead.onload = function (index) {
    return function () {
        console.log(index);
    };
}(i);
------解决方案--------------------
引用:
上面的两位的可以,我有个疑问,为什么这样可以呢
JavaScript code?1234567891011   var func_arr = [];        for (var i = 0; i < 5; ++i) {            func_arr.push(function () {                console.log(i);     ……