我正在通过一个HTML5拖放示例http://www.sitepoint.com/html5-file-drag-and-drop/,但无法确切地知道在此结束时循环中发生了什么功能-
function FileSelectHandler(e) {
// cancel event and hover styling
FileDragHover(e);
// fetch FileList object
var files = e.target.files || e.dataTransfer.files;
// process all File objects
for (var i = 0, f; f = files[i]; i++) {
ParseFile(f);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,第一个表达式应该只是i = 0.发生了什么事, f?只要文件数组包含键i,我就会递增,f被解析,然后再次查找文件[i],对吧?
在for循环中,您可以使用逗号分隔多个初始值设定项.这就是你所拥有的,加上懒惰(和误导性)var.在这种特殊情况下,它相当于:
function FileSelectHandler(e) {
var i, f, files;
// cancel event and hover styling
FileDragHover(e);
// fetch FileList object
files = e.target.files || e.dataTransfer.files;
// process all File objects
for (i = 0; f = files[i]; i++) {
ParseFile(f);
}
}
Run Code Online (Sandbox Code Playgroud)
...因为var是严重的误解在JavaScript中.但是使用多个初始化器的一个更好的例子可能是:
var a = [1, 2, 3], index, len;
for (index = 0, len = a.length; index < len; ++index) {
// Do something with a[index]
}
Run Code Online (Sandbox Code Playgroud)
在那里,var删除了误导,我们可以看到在for声明的开头有两个不同的初始化器.