Von der Logik her würde ich aber sagen, dass der erste Code langsamer sein sollte, weil ja der gleiche Code ausgeführt wird, nur noch mit Zusätzlichen Funktionsaufrufen (Abspeichern und Auslesen der Rücksprungadresse).
var count = 50;
function doSomething() {
//zeitintensive Operationen; z.B:
for(var k = 0; k < 30; k++) {
foo.push(bar);
foo=(foo.join(",")+bar+","+bar).split(",");
}
}
var foo=[], bar="a";
var t1 = new Date();
for(var i = 0; i < count; i++) doSomething();
var t2 = new Date();
var foo=[], bar="a";
var t3 = new Date();
for(var i = 0; i < count; i++) {
//zeitintensive Operationen; z.B:
for(var k = 0; k < 30; k++) {
foo.push(bar);
foo=(foo.join(",")+bar+","+bar).split(",");
}
}
var t4 = new Date();
alert(
'function: '+(t2 - t1)
+ '\nloop: '+(t4 - t3)
)
Bei mir (Fx 3.5) schwankt das je nach Tageszeit ;-)
Gestern war function deutlich schneller, jetzt ist es etwas langsamer. Auf jeden Fall kein deutlicher Unterschied.
Waren die Variablen foo und bar bei beiden Versuchen global definiert? Ansonsten kann es auch sein, dass der grosse Zeitunterschied beim OP was damit zu tun hat, dass die Variablen in der Funktion immer wieder neu angelegt werden, weil sie ja nur solange leben, bis die Funktion durchgelaufen ist.
Dann leg mal die Variabeln lokal an und du wirst erstaunt sein.
Struppi.