Cortys: Verschachtelte Funktion von außen aufrufen

Hallo, ich würde gerne eine Funktion, die innerhalb einer anderen Funktion definiert ist von außen aufrufen? Also z.B. so etwas:

  
meineFunktion = function() {  
function VerschachtelteFunktion() {  
//Code...  
}  
}  
  
(meineFunktion)();  
VerschachtelteFunktion();  

So funktioniert das leider nicht. Kann man so etwas überhaupt machen und wenn ja, wie?

Danke für alle Antworten!

  1. meineFunktion = function() {
    function VerschachtelteFunktion() {
    //Code...
    }
    }

    (meineFunktion)();
    VerschachtelteFunktion();

      
      
    function meineFunktion()  
    {  
      this.VerschachtelteFunktion = function() {}  
    }
    
    1. function meineFunktion()
      {
        this.VerschachtelteFunktion = function() {}
      }

      Danke! Das hat funktioniert.

  2. Hi,

    Hallo, ich würde gerne eine Funktion, die innerhalb einer anderen Funktion definiert ist von außen aufrufen?

    Vielleicht hilft dir auch molilys Guide zu Javascript.

    Bis die Tage,
    Matti

    1. Danke für den Link! Wenn ich nichts übersehen habe geht es in dem Tutorial glaube ich (nur) um Objekte in JavaScript. Auf verschachtelte Funktionen, welche von der obersten Ebene aus aufgerufen werden, wird nicht eingegangen.

      War aber trotzdem hilfreich, denn das ist wirklich eine sehr schöne Erläuterung zu Objekten. Die Seite merke ich mir!

  3. ich würde gerne eine Funktion, die innerhalb einer anderen Funktion definiert ist von außen aufrufen?

    Wieso deklarierst du Funktionen verschachtelt, wenn du das beste Feature von JavaScript – die Kapselung von Daten mittels Funktions-Scopes – dann gleich wieder rückgängig machst?

    Durch die Verschachtelung von Funktionen lassen sich JavaScript-Programme sehr gut strukturieren, sodass man eben nicht das globale Objekt mit hunderten losen Objekten zuballern muss. Siehe dazu Organisation von JavaScript.

    Zur Erklärung: Verschachtelte Funktionen sind standardmäßig lokale Variablen. Wenn du this.Funktion = function () {}; notierst, so fügst du dem globalen Objekt eine Methode hinzu. Vorausgesetzt ist, dass this im jeweiligen Kontext auf window zeigt. Das ist nicht immer der Fall, daher wäre es sinvoller, direkt window anstatt this zu schreiben.

    Du könntest auch einfach Funktion = function () {}; schreiben, ohne »var« davor. Das erzeugt ebenfalls eine globale Variable. Allerdings ist die explizite Schreibweise mit window.globaleVariable = wert; vorzuziehen, um lokale Variablen von absichtlich gesetzten globalen zu unterscheiden.

    Mathias

    1. Ich mache das, weil ich eine Funktionsbibliothek habe, die ich allerdings erst durch Aufruf einer anderen Funktion zum Script hinzufügen will. Mit AJAX und eval() möchte ich da nicht arbeiten und in jede Funktion eine Bedingung einzufügen wäre zu viel Arbeit, da es recht viele Funktionen sind.

      1. Ich mache das, weil ich eine Funktionsbibliothek habe, die ich allerdings erst durch Aufruf einer anderen Funktion zum Script hinzufügen will. Mit AJAX und eval() möchte ich da nicht arbeiten und in jede Funktion eine Bedingung einzufügen wäre zu viel Arbeit, da es recht viele Funktionen sind.

        Okay. Aber wieso besteht – wenn ich das richtig verstehe – deine Funktionsbibliothek aus unzähligen losen globalen Funktionen? Du solltest dich wirklich mit Modulen und Modularisierung beschäftigen. Bei der Gelegenheit kannst du dir auch Scripte wie RequireJS ansehen, die genau dieses Problem zu lösen suchen: Das asynchrone Nachladen von Scripten bei gleichzeitiger Kapselung.

        Grüße,
        Mathias

        1. Nun ja, das ist halt ein gewachsenes System und ursprünglich war das ganze wesentlich kleiner geplant. Der Aufwand das alles umzustellen würde sich nicht lohnen.
          Wenn ich nochmal etwas ähnliches anlegen sollte, würde ich natürlich auch eine bessere Strukturierung verwenden.