Verständnisfrage zu Closures

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verständnisfrage zu Closures

    Also ich habe folgenden Code:
    PHP-Code:
    function funktionA()
    {
      var 
    variable 'bla';
      function 
    funktionB()
      {
        
    alert (variable);
      }
      
    funktionB();
    }
    funktionA(); 
    Anstelle von function funktionB() kann ich ja auch so was schreiben:
    PHP-Code:
    funktionB = function()
    {
      
    alert (variable);

    oder
    PHP-Code:
    var funktionB = function()
    {
      
    alert (variable);

    Also. Bei einem funktionB = function() hängt die Funktion nach dem Aufruf von funktionA() im window-Objekt. Um das zu verhindern, wird da wohl die Variante var funktionB = function() genommen, um das zu verhindern.

    Aber! Und jetzt kommt meine eigentliche Frage. Was ist denn nun der Unterschied zwischen var funktionB = function() und function funktionB()? Auf beide kann man nicht direkt zugreifen und sie hängen auch nicht im window-Objekt.

    Peter

    PS: Ich werde diese Sprache wohl nie ganz begreifen.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    Zitat von Kropff Beitrag anzeigen
    Was ist denn nun der Unterschied zwischen var funktionB = function() und function funktionB()?
    Im großen und ganzen ist der Unterschied: Es gibt keinen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Zitat von wahsaga Beitrag anzeigen
      Im großen und ganzen ist der Unterschied: Es gibt keinen.
      Und was soll dann der Sch***ß? Ich bastel hier schon eine Stunde herum, um endlich mal einen Unterschied zu finden und dann das. Wieso einfach, wenn es auch kompliziert geht?

      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Und warum willst du auf Teufel komm raus Unterschiede finden, wenn beides funktioniert ...? :-)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von wahsaga Beitrag anzeigen
          Und warum willst du auf Teufel komm raus Unterschiede finden, wenn beides funktioniert ...? :-)
          Ich frag mich nur, warum es dann zwei(!) Schreibweisen für ein die selbe Sache gibt. Außerdem muss man bei JavaScript ja immer auf eine Überraschung gefasst machen. Wie zum Beispiel das this in einer lokalen Funktion. Weist dann auf das window-Objekt hin und keine Sau weiß warum. Naja, ist halt JavaScript. *kopfschüttel*

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Zitat von Kropff Beitrag anzeigen
            Ich frag mich nur, warum es dann zwei(!) Schreibweisen für ein die selbe Sache gibt.
            Es gibt Unterschiede zwischen diesen beiden Varianten. Die mit var erzeugt eine anonyme Funktion, die an eine Variable gebunden ist. Die mit function name () erzeugt keine anonyme Funktion. Den Unterschied kann man erkennen, wenn man mit der Caller-Eigenschaft rummacht.

            Zitat von Kropff Beitrag anzeigen
            Außerdem muss man bei JavaScript ja immer auf eine Überraschung gefasst machen. Wie zum Beispiel das this in einer lokalen Funktion.
            Auch das ist gut dokumentiert und folgt Regeln die zwar anders als in PHP sind, denen aber dennoch eine nachvollziehbare Logik innewohnt.

            ECMAScript Language Specification (HTML version)
            ECMAScript Language Specification (HTML version)
            https://developer.mozilla.org/en/Jav...s/Special/this
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              https://developer.mozilla.org/en/Jav...function_scope

              Kommentar


              • #8
                Zitat von AmicaNoctis Beitrag anzeigen
                Es gibt Unterschiede zwischen diesen beiden Varianten. Die mit var erzeugt eine anonyme Funktion, die an eine Variable gebunden ist. Die mit function name () erzeugt keine anonyme Funktion. Den Unterschied kann man erkennen, wenn man mit der Caller-Eigenschaft rummacht.
                Da bin ich ja erleichtert, dass es doch einen Unterschied gibt.
                Zitat von AmicaNoctis Beitrag anzeigen
                Auch das ist gut dokumentiert und folgt Regeln die zwar anders als in PHP sind, denen aber dennoch eine nachvollziehbare Logik innewohnt.
                Naja, ist wohl Ansichtssache. Nur weil etwas spezifiziert wurde, heißt das noch lange nicht, dass es logisch oder sinnvoll ist. Ich denke da nur an die collapsing margins.

                Peter

                Zitat von AmicaNoctis Beitrag anzeigen
                Erinnerung an mich selbst: Niemals, never ever anyway, Kommentare vor dem HTML-Element einfügen!!!
                Siehste, ist sicher auch irgendwo spezifiziert und folgt einer bestimmten Logik. Aber dich treibt es in den Wahnsinn.
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar

                Lädt...
                X