Hallo Nico R.,
das liegt daran, dass Du var und nicht let nimmst, zusammen mit Deiner kaputten Schleifensteuerung und dem falsch gemachten Versuch, die Probleme von var zu umgehen.
Aber der Reihe nach.
Variablen mit var werden "gehoben", d.h. i, f, test und reader werden behandelt, als wären sie vor der Schleife deklariert worden.
Sowas ist ungünstig, wenn man sie in einer Closure einschließt und in einer Schleife mehrere davon bildet. Die Closure ist die Funktion, die von deiner function(theFile) zurückgegeben wird und f einschließt.
Das ist aber immer die gleiche Variable, und weil deine Schleife endet, wenn du hinter das Ende des files-Arrays kommst und f undefined wird, ist bei Ausführung des load Events f immer undefined.
Du verwendest bereits eine IIFE um das Problem zu lösen. Damit schaffst du einen neuen Closure-Kontext pro Durchlauf der Schleife. Du musst jetzt nur noch theFile statt f verwenden und dann passt es.
Besser ist aber: verwende let statt var. Variablen mit let werden nicht gehoben, und ihr Geltungsbereich ist nicht die Funktion, in der sie stehen, sondern der {...}-Block. Du bekommst also pro Durchlauf einen neuen Variablensatz und kannst auf die Hilfsfunktion, die theFile erzeugt, verzichten.
Und dann noch dies: die Anzahl der Schleifendurchläufe solltest du über i<files.length steuern, nicht darüber dass Javascript undefined liefert, wenn du hinter dem Ende des Arrays zugreifst.
Rolf
sumpsi - posui - obstruxi