Gå til innhold

[Løst]Skop og pass-by-value i JavaScript


Anbefalte innlegg

Jeg lurer litt på hva x,y,z,a,b,c,arr ender opp med å være her (spesielt arr):

 

function MinKlasse(arg) {
 this.x = arg;
 this.y = 2;
 this.z = 3;
 this.b = 4;
 this.c = 0;
 this.arr = new Array();

 this.callback = function(fn) { fn(); };
}

MinKlasse.prototype.a = 5;
MinKlasse.prototype.minFunksjon = function(arg, self) {
 y = arg;
 this.z = arg;
 self.a = arg;

 self.callback(function() {
self.b = arg;
 });

 for (self.c = 0; self.c < 3; self.c++) {
window.setTimeout(
  function(){ self.arr.push(self.c); },
  1000
);
 }
}

var minKlasse = new MinKlasse(1);
window.setTimeout(
 function(){ minKlasse.minFunksjon(6,minKlasse); },
 1
);
window.setTimeout(function() {
document.write("x="+minKlasse.x+" (forventet 1)<br/>\n");
document.write("y="+minKlasse.y+" (forventet 2)<br/>\n");
document.write("z="+minKlasse.z+" (forventet 3)<br/>\n");
document.write("a="+minKlasse.a+" (forventet 6)<br/>\n");
document.write("b="+minKlasse.b+" (forventet 6)<br/>\n");
document.write("c="+minKlasse.c+" (forventet 3)<br/>\n");
document.write("arr[0]="+minKlasse.arr[0]+" (forventet 0)<br/>\n");
document.write("arr[1]="+minKlasse.arr[1]+" (forventet 1)<br/>\n");
document.write("arr[2]="+minKlasse.arr[2]+" (forventet 2)<br/>\n");
},1500);

 

 

hmm... kanskje jeg rett og slett skal teste og se hva det blir...

Endret av Pion
Lenke til kommentar
Videoannonse
Annonse

Fikk følgende resultat:

 

x=1 (forventet 1)

y=2 (forventet 2)

z=6 (forventet 3)

a=6 (forventet 6)

b=6 (forventet 6)

c=3 (forventet 3)

arr[0]=3 (forventet 0)

arr[1]=3 (forventet 1)

arr[2]=3 (forventet 2)

 

Altså har jeg lært:

 

- 'this' er ikke så ubrukelig som jeg hadde inntrykk av; men jeg fortsetter nok med 'self' uansett.

- teksten inni function(){ ... }-blokken ser ikke ut til å bli evaluert før den kjøres, altså foregår det i praksis en pass-by-reference istedenfor pass-by-value. greit å vite

 

 

der svarte jeg på mitt eget spørsmål, men med litt flaks så kanskje noen andre lurte på det samme :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...