erstellt von max, am 12.11.2008 15:57

also folgendes script:

for (var i=0; i<2; i++) {
   var j = i;
   setTimeout(function() { alert("i:" + i + ", j:" + j) }, 1);
}

was wuerde man hier erwarten: also ich:

  • 2 alerts
  • wobei im einen i:2 j:0
  • und im andern i:2 j:1 steht

wieso?

  • also die variable i wird ausserhalb vom for scope deklariert, d.h. die zaehlt durch und bleibt bei der 2 stehen.
  • und die variable j wird innerhalb vom for scope deklariert, d.h. dadurch dass ich bei setTimeout eine closure uebergebe, sollte der wert einmal 0 und dann 1 aufweisen.

aber! das ergebnis ist zweimal i:2 j:1, und dass versteh ich ueberhaupt nicht. kann mir das jemand erklaeren? oder ist das so eine nicht ganz logische JS optimierung der browser (damit die j variable nicht jedesmal deklariert werden muss ????).

3 Kommentar(e):

#12 chl sagte am 13.11.2008 00:33
chl
there's no such thing as for scope! (aber in js 1.7 gibt's, let sei dank, block-level scope.)
#13 max sagte am 13.11.2008 15:25
max
oh, danke fuer den tip. wieder was gelernt. interessant, dass ich das problem bis jetzt noch nie gehabt hab :)
#14 Elias sagte am 06.12.2008 12:34
Elias
Javascript hat Scopes auf Funktionsebene.

Neuen Kommentar schreiben: