[ECMAScript]

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mischien is dit meer een opmerking dan een vraag maar het viel mij op dat de iterator na een FOR loop blijft bestaan.

for(i=0;i<3;i++)
code

trace( i ); /// 2


vinden jullie dat niet een beetje vreemd ??? dat heb ik in andere talen nog niet meegemaakt,
dan moet ik dus eigenlijk altijd iets neerzetten als i = null;

als ik de iter later nog wil gebruiken dan save ik hem wel....toch??

of zit hier iets handigs achter..

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

In javascript blijven alle variabelen die binnen een functie gedeclareerd zijn beschikbaar in de hele functie. Dat zijn volgens mij de enigste scope blokken binnen javascript, maar waarom dat zo gedaan is weet ik ook niet.

JavaScript:
1
2
3
4
5
6
for(var i=0;i<3;i++) {
//code
}

trace( i ); /// returns 3
}


Als alternatief op i = null:

JavaScript:
1
2
3
4
5
6
7
function x() {
for(var i=0;i<3;i++) {
//code
}
}
x();
trace( i ); /// returns undefined

[ Voor 3% gewijzigd door CoolGamer op 15-10-2009 22:44 ]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Je hoeft hem volgens mij niet op NULL te setten.
Indien je hem opnieuw wilt gebruiken zet je een nieuwe waarde
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(function () { 
    var array1 = ['value1', 'value2', 'value3'],
        array2 = ['val1', 'val2'],
        i, l;

    //Eerste loop binnen dezelfde scope
    l = array1.length;
    for (i = 0; i < l; i += 1) {
        alert(array1[i]);
    }

    //Tweede loop met dezelfde l en i
    //In de for loop set je i terug naar 0
    l = array2.length;
    for (i = 0; i < l; i += 1) {
        alert(array2[i]);
    }
}());

[ Voor 0% gewijzigd door vorlox op 15-10-2009 23:11 . Reden: Fout bijgewerkt ]


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Verwijderd schreef op donderdag 15 oktober 2009 @ 22:28:
vinden jullie dat niet een beetje vreemd ??? dat heb ik in andere talen nog niet meegemaakt,
PHP doet exact hetzelfde.

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op donderdag 15 oktober 2009 @ 22:28:
mischien is dit meer een opmerking dan een vraag maar het viel mij op dat de iterator na een FOR loop blijft bestaan.

for(i=0;i<3;i++)
code

trace( i ); /// 2
Ik mag hopen dat dat 3 is, en niet 2 eigenlijk...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

//edit lama, ik ging ervan uit dat de trace in de for loop zat, niet erbuiten

volgens mij komt dit doordat javascript variabelen automatisch in global scope zet (voor for loops).

[ Voor 123% gewijzigd door DanielG op 16-10-2009 12:00 . Reden: 8)7 ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Grappig dit wist ik niet, maar het verklaart wel meteen waarom je in Visual Studio 2008 warnings over dubbel gedeclareerde variabelen krijgt als je in een javascript file meerdere for-loops gebruikt met for (var i=0;i<n;i++)etc. binnen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:51

crisp

Devver

Pixelated

Het is daarom ook aan te bevelen om gebruikte variabelen bovenin je functieblok expliciet (en eenmalig) te declareren. Note overigens dat als je een variabele niet expliciet declareert deze globaal wordt:

JavaScript:
1
2
3
4
5
6
function foo()
{
    for (i = 0; i < 3; i++);
}
foo();
alert(i); // 3

Intentionally left blank

Pagina: 1