Javascript 无法将变量传递给函数
我想将当前索引传递给通过FileApi读取图像并显示图像预览的函数:Javascript 无法将变量传递给函数,javascript,html,Javascript,Html,我想将当前索引传递给通过FileApi读取图像并显示图像预览的函数: for(var i = 0, f; f = files[i]; i++) { if (!f.type.match("image.*")) { continue; } var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { var dv = document.cr
for(var i = 0, f; f = files[i]; i++) {
if (!f.type.match("image.*")) {
continue;
}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var dv = document.createElement("div");
//.............
};
})(f);
reader.readAsDataURL(f);
}
我试过这个:
//.......
var reader = new FileReader();
reader.onload = (function(theFile, i2) {
//i2 is defined here
return function(e) {
var dv = document.createElement("div");
//i2 isn't defined here
};
})(f, i);
但正如你所看到的,i2并没有定义。如何解决这个问题?如果稍微组织一下包装器函数,就可以正确地确定所有内容的范围。在这里,我基本上将整个循环体包装在一个自调用函数中。然后,onload处理程序只是一个普通的旧函数赋值。在生产代码中,可以删除虚拟onload
var文件=['1','2','3'];
for(var i=0,f;f=files[i];i++){
(功能(i,f){
var reader=new FileReader();
reader.onload=函数(){
var dv=document.createElement(“div”);
控制台日志(f+i);
};
//虚拟加载
(功能(r){
设置超时(r.onload,1000+(i+1)*333);
})(读者);
})(i,f)
}
但正如您所看到的,i2没有定义
-您说它没有定义,但我们看不到它没有。您可以通过console.log(i)查看它是否定义了?这个例子:onload=function(f,i){returnfunction(e){console.log(f,i);}}(“filename”,2);onload()
显示它已定义您的代码逻辑(如问题中所示)应该可以正常工作-正如您在这个虚拟的小提琴中所看到的-也许您在实际应用中做了一些错误的事情code@gilbertxenodike,每件事都有定义,但你在做很多花哨的把戏来重新审视事物,结果是缩小了超出你预期的范围。试着减少对范围的幻想,它应该会起作用。这读起来更像是一个发现差异的游戏,而不是一个答案。你改变了什么?为什么要解决这个问题?