Javascript For循环中的第一个表达式 - 逗号是什么?

Mar*_*ark 3 javascript loops

我正在通过一个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],对吧?

T.J*_*der 5

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声明的开头有两个不同的初始化器.