Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Frage zu Funktionsdeklaration

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Frage zu Funktionsdeklaration

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      WolfgangFB last edited by

      Hallo

      Ich habe eine für mich neue Syntax für einen Funktionsdeklaration beim googeln entdeckt und frage mich jetzt, ob es einen prinzipiellen Unterschied zwischen beiden Methoden gibt oder ob eine schneller als die andere, performanter oder was auch immer ist.
      Den einzigen Unterschied den ich bisher festgestellt habe ist, dass die Deklaration mit "function" auh nach dem Aufruf kommen kann währen die mit "const" immer vor dem Aufruf deklariert sein muss.

      const summe = (x, y) => {
          return x+y;
      };
      
      function summe2(x, y){
          return x+y;
          }
      
      console.log(summe(5,4));
      console.log(summe2(5,4));
      

      Es kommt (bisher) immer das richtige Ergebnis raus.

      Codierknecht paul53 OliverIO 3 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @WolfgangFB last edited by

        @wolfgangfb
        Auch wenn das eine nette Spielerei zu sein scheint: Ich würd‘s lassen und Funktionen „klassisch“ deklarieren.
        Es liest sich einfacher. Und das reicht mir als Grund bereits völlig, denn Code muss vor allem les- und damit gut wartbar sein.
        Selbst wenn das minimale Performancevorteile bringt: Man hüte sich vor unnötigen Optimierungen. Die bringen in der Regel mehr Ärger als Nutzen.

        https://www.freecodecamp.org/news/constant-confusion-why-i-still-use-javascript-function-statements-984ece0b72fd

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @WolfgangFB last edited by paul53

          @wolfgangfb sagte: die mit "const" immer vor dem Aufruf deklariert sein muss.

          Man sollte Variablen und Funktionen immer vor ihrer Verwendung / ihrem Aufruf deklarieren, damit man dem Compiler einen unnötigen Durchlauf erspart. Mit let und const muss vor der Verwendung deklariert werden.

          @wolfgangfb sagte in Frage zu Funktionsdeklaration:

          ob eine schneller als die andere, performanter

          Das Compiler-Ergebnis wird wahrscheinlich identisch sein.

          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @WolfgangFB last edited by

            @wolfgangfb

            es gibt schon ein Unterschied zwischen den beiden Deklarationen.
            https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions?retiredLocale=de
            der wichtigste Unterschied ist der erste, das eine Arrow-Funktion keinen eigenen neuen Context oder Scope erzeugt. Das hilft insbesondere bei Callback oder bei Promise-Verwendung, das man bspw this nicht separat (per bind) übergeben muss.
            Ich denke Performance macht es keinerlei Unterschied.
            Function erzeugt ein eigenes (Function-) Objekt auf das man wieder Funktionen verwenden kann, was bei Arrow nicht geht.
            https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function?retiredLocale=de

            Auch zwischen let und var gibt es einen Unterschied.
            Bei var wird hoisting angewendet. dh alle var Deklarationen innerhalb eines Funktionsblocks werden eingesammelt und so getan als ob sie am Anfang schon gemacht worden sind.
            Bei let gilt die Deklaration erst ab der Stelle wo sie tatsächlich auch steht.
            Auch bei der Scope-Betrachtung gibt es einen Unterschied.
            https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let?retiredLocale=de

            Codierknecht 1 Reply Last reply Reply Quote 1
            • Codierknecht
              Codierknecht Developer Most Active @OliverIO last edited by

              @oliverio sagte in Frage zu Funktionsdeklaration:

              eine Arrow-Funktion keinen eigenen neuen Context oder Scope erzeugt

              Wobei ich das nicht unbedingt als Vorteil sehe.
              Wenn der Scope nicht mehr so klar ist, führt das (meiner Ansicht nach) gerne mal dazu, dass unerwünschte Seiteneffekte entstehen.
              Bei uns gilt die Regel, den Scope so klein wie nur möglich zu halten. Darum meckert unsere statische Codeanalyse z.B. auch globale Variablen an und bricht dann Continuous-Integration ab. Ich weiß aber nicht, ob das hier vergleichbar ist - bin halt in JS noch nicht so fit.

              @oliverio sagte in Frage zu Funktionsdeklaration:

              alle var Deklarationen innerhalb eines Funktionsblocks werden eingesammelt und so getan als ob sie am Anfang schon gemacht worden sind

              Darum liebe ich mein Delphi ♥ Hier müssen alle Variablen im Kopf einer Methode deklariert werden.
              Ich habe schon immer ein Problem mit "Variablen werden unmittelbar vor ihrer ersten Verwendung deklariert". Die tauchen dann später irgendwo auf und man muss die passende Deklaration erst suchen.

              W 1 Reply Last reply Reply Quote 0
              • W
                WolfgangFB @Codierknecht last edited by

                @codierknecht sagte in Frage zu Funktionsdeklaration:

                Darum liebe ich mein Delphi ♥ Hier müssen alle Variablen im Kopf einer Methode deklariert werden.

                Du sprichst mir so sehr aus dem Herzen. Meine "Muttersprache" ist auch Delphi und ich liebe es, dass jeder noch so popelige Typecast immer explizit angegeben werden muss und jede Veriable ganz klar am Anfang definiert sein muss und ein Int ist ein Int wird nicht irgendwann zu einem String oder einem Array.

                1 Reply Last reply Reply Quote 1
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                591
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                4
                6
                313
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo