Avatar billede eskeeske Nybegynder
03. november 2003 - 18:02 Der er 11 kommentarer

Hvornår behøver man at skrive var.

Nogen gange kan man skrive var eller lade være.

Altså f.eks.

var i=3;
i++;

Eller blot

i=3;
i++;

Men i nogen tilfælde skal man skrive var . Hvornår er det mere præcist ?
Avatar billede hells Nybegynder
03. november 2003 - 18:13 #1
du behøver ikke rigigt at skrive var noget sted, men du kan bruge det for overskuelighedens skyld.
Avatar billede skovenborg Nybegynder
03. november 2003 - 18:43 #2
ud fra Netscapes javascript reference så skal du bruge var i følgende sitationer:
# If a global variable of the same name exists.
# If recursive or multiple functions use variables with the same name.
Avatar billede olebole Juniormester
03. november 2003 - 20:26 #3
<ole>

hells >> Helt forkert.

skovenborgs citat betyder:

Skal du tilgå samme variabel inde i flere funktioner, skal den være erklæret med:
  var ib = "En værdi";
et sted udenfor funktionerne - og før, den skal bruges.

er variablen 'ib' erklæret, som vist ovenfor og du ønsker at bruge en anden variabel i en funktion med samme navn, skal den erklæres med 'var' _inde_ i funktionen. Prøv f.eks. denne:

<script type="text/JavaScript">
var ib = "dreng";
function bla() {
  var ib = "mand";
  alert("Lokal: " + ib);
}
bla();
alert("Global: " + ib);
</script>

Det er dog god kodeskik at skrive det overalt, hvor du opretter en ny variabel. En detalje, du dog skal være opmærksom på, er følgende:

for (i=0; i<10; i++) {
  var ib = "noget_" + i;
  alert(ib);
}

er rigtig skidt kode - da du her får mudret dit variabel-scope til med 10 variabler ... og det er jo ikke meningen. Derfor bør du skrive:

var ib;
for (i=0; i<10; i++) {
  ib = "noget_" + i;
  alert(ib);
}

Her oprettes én variabel, der sættes til en værdi 10 gange  :)
/mvh
</bole>
Avatar billede skovenborg Nybegynder
03. november 2003 - 20:47 #4
olebole >> Tak for oversættelsen :-)
Avatar billede olebole Juniormester
03. november 2003 - 21:22 #5
... anytime  ;o)
Avatar billede eskeeske Nybegynder
04. november 2003 - 01:15 #6
Tak for de fine svar.
Avatar billede skovenborg Nybegynder
26. december 2003 - 14:30 #7
...en lille tilføjelse (selv om det er et gammelt spørgsmål, som burde være lukket nu):

Hvis du bruger delete operatoren (se http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/expr.html#1008702)
så kan du ikke slette en variabel som er sat med en var operator.

x = 42;
var y = 60;
delete x; // Denne kan du godt slette
delete y; // Denne kan ikke slettes da y er deklereret med en var operator

Ja, det var bare lige det - og så synes jeg du bør bede olebole om et svar så vi kan få lukket spørgsmålet :-)
Avatar billede olebole Juniormester
28. december 2003 - 19:44 #8
1. 'var' er nu ikke en operator, men en statement  ;o)
2. delete-operatoren er beregnet til at slette et ikke native objekt, en property på et tilsvarende objekt eller et element i et array ... ikke en variabel.

Den kan dog gøre det, hvis variablen ikke explicit er erklæret som variabel.
Det må altså opfattes som værende en (ulogisk) sideeffekt, at 'x = 42' kan delete's - men helt i overensstemmelse med semantikken og logikken, at 'var y = 60' ikke kan  :o)
/mvh
Avatar billede skovenborg Nybegynder
28. december 2003 - 23:57 #9
olebole >> Den med delete fandt jeg også bare lige pludseligt i Netscapes Javascript Reference hvor de gav det der eksempel. Samtidig skrev de dog også det  du skriver om delete's funktion.

Men tak for forklaringen.
Avatar billede olebole Juniormester
29. december 2003 - 04:37 #10
... anytime  ;o)

En lille tilføjelse - mange ikke er klar over - er, at objekter og arrays er to forskellige repræsentationer af samme datastruktur - i JavaScript.
Det betyder, du kan skrive:

var mitObj = new Object();
mitObj.noget = "en streng";
alert( mitObj.noget );
mitObj["noget andet"] = "en anden streng";
alert( mitObj["noget andet"] );

var mitArr = new Array();
mitArr.noget = "en streng";
alert( mitArr.noget );
mitArr["noget andet"] = "en anden streng";
alert( mitArr["noget andet"] );

Du kan ikke oprette et associativt array med 'new Array()' - men du kan i stedet bruge short-hand constructor'en for et objekt '{}':

var associativtArray = { "noget":"en streng", "noget andet":"en anden streng" };
alert( associativtArray["noget"] );
alert( associativtArray["noget andet"] );

/mvh
Avatar billede olebole Juniormester
29. december 2003 - 04:41 #11
"Du kan ikke oprette et associativt array med 'new Array()' ... " burde have været:
"Du kan ikke direkte oprette et associativt array med 'new Array()' - som du kan med et indexeret: new Array('en streng', 'en anden streng')"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester