Felix Riesterer: Die wahreit um this?

Beitrag lesen

Lieber molily,

vielen Dank für Deine Klarstellungen. Aber eines will mir - auch wenn ich Dir bereitwillig Glauben schenke - nicht einleuchten:

function foo(){
   function bar(){
      var w=this;
   }
}


> >   
> > ist äquivalent zu  
> >   
> > ~~~javascript

foo = function () {  

> >     bar = function () {  
> >         var w = this;  
> >     }  
> > }

Wenn man das im "globalen Scope" notiert, dann hat man (Du nennst es "laut Sichtbarkeit") im Wesentlichen dem window-Objekt eine neue Methode spendiert: window.foo - oder nicht?

Mir ist jetzt nicht klar, inwiefern hier keine Äquivalenz besteht. Ist es nur der Umstand, dass "function foo () {}" von der JS Engine anders "verstanden" wird, als "foo = function () {}"? Nach meinem laienhaften Wissen ist letzteres eine Deltafunktion, die einer Variable zugewiesen wird, und ersteres eine Funktionsdeklaration - aber wie genau muss man hier in die Tiefen einer JS-Engine gehen, um "äquivalent" sagen zu können?

bar ist eine lokale Funktion.

Das ist das, was ich an JS nicht besonders mag. Mir leuchtet nicht ein, wozu man eine solche lokale Funktion benötigen wollte. Entweder ich bastle mir eine Variable, in die ich ein Funktionsobjekt (ist das dann eine "Deltafunktion"?) in der Art wie oben schmeiße, oder ich definiere mir eine Methode an ein Objekt. Wozu also eine lokale Funktionsdeklaration? Und warum ist sie dann "lokal" und keine Eigenschaft des window-Objektes?

Analog zu Deinem "laut Sichtbarkeit" müsste ich dann schreiben:

function foo () { function bar () { var w = this; } }
ist laut Sichtbarkeit äquivalent zu
window.foo = function () { var bar = function () { var w = this; }; };

Habe ich das jetzt richtig verstanden?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)