Ein paar Fragen zu JavaScript

  • Hallöschen,


    ich muss gerade JavaScript für eine Klausur lernen. Ich selber habe Jahrelang Java programmiert, und komme dementsprechend aus der Java Welt in die JavaScript Welt.

    Jetzt bin ich auf 2 Fragen gestoßen, die mich ein wenig verwirren. Vielleicht kann mich jemand aufklären.


    1) Zwei Varianten der Funktionsdekleration.

    Ich habe herausgefunden, es gibt 2 Möglichkeiten Funktionen zu deklarieren:

    Code
    function add(a,b) {     
        return a+b;
    }
    Code
    var add = function(a,b) {
        return a+b;
    }     

    Was ist der Unterschied? Wann verwendet man die obere Methode, wann die untere?


    2) Funktionen als Parameter und als Rückgabewert.

    In JavaScript ist es möglich, Funktionen als Parameter und als Rückgabewert von anderen Funktionen zu verwenden.

    Hier ein Beispiel, was ich meine:


    a) Weso darf ich squared 2 Zahlen übergeben, wenn die Funktion selber nur 1 Parameter hat? Darf ich das immer machen, oder nur in diesem Fall?

    -> Der Aufruf von "add(4,2)" ruft schließlich die Funktion "squared" mit den Parametern (4,2) auf. Die Funktion "squared" hat aber nur einen Parameter, den Parameter "x"..


    Besonders verwirrt mich diese Zeile:

    Code
    var func = function(func)

    b) Wieso hat die Funktion "func" sich selber als Parameter?

  • zu 1: Damit habe ich mich zu wenig befasst. Und ich glaube auch, dass es nie wirklich ein Unterschied machen wird wenn du es als Variable oder als Funktion deklarierst


    2a: func gibt dir beim Aufruf eine neue Funktion zurück. Heißt unter der Haube würde:

    squared(4) + squared(2) evaluiert werden.


    Prinzipiell darfst du aber auch einer Funktion mehr Parameter geben als sie erwartet. JavaScript ist überhaupt nicht strikt was das angeht.


    2b: hat sie tatsächlich nicht, die Variable Namen sind unglücklich gewählt. Du kannst dir dazu die Präzedenz von JavaScript anschauen.

  • Kurz noch ein paar Anmerkungen zur ES6 Convention:


    var sollte generell vermieden werden. Man verwendet zu meist const oder wenn es nicht anders geht let als Deklarationstyp. (Genauere darüber hier: https://ui.dev/var-let-const/ )


    1)

    Funktion werden großteils nur noch über "lambda" ausgedrückt, sprich deine Funktion im Beispiel 1 wird anders definiert. (Beispiel 1.1 wird z.B kaum mehr verwendet, da vor allem in NodeJS und Modulen Funktionen exportiert werden müssen (module.exports = {fnc1,fnc2} etc.) und es einfacher/lesbarer ist diese wie folgt zu deklarieren:

    Code
    const add = (a,b) => { 
     return a + b;
    }
    //Oder direkt: 
    const add = (a,b) => a + b 
    
    //module exports beispiel
    module.exports = add //oder {add, subtract} je nach gebrauch eine Funktion über function(x) definiert kann so nicht exportiert werden da sie quasi nicht "gespeichert" ist in einer Variable. 

    Um dir nun auch die Antwort zu geben, wann die obere bzw. untere Methode verwendet wird klärt sich durch das zuvor erwähntemodule.exports. Um Funktionen in Modulen zu exportieren und von aussen accessable zu machen verwendet man Variante 2. Wie schon zuvor erwähnt Variante 1 wird kaum noch verwendet ausser in der Frontend Welt womöglich.


    2)

    Vielleicht siehst du es wenn du es etwas anders schreibst: (Wie von meinem Vorposten bereits erwähnt die Namen sind etwas kontraproduktiv gewählt worden.

    D.h

    Du übergibst "foo" eine "expression" die in diesem Fall "squared" also "x*x" wäre und daraufhin gibt dir die foo definition eine neue Funktion zurück welche 2 Parameter aufnimmt und die zuvor übergebene Expression als Funktion in der "neuen" Funktion verwendet.

    Ist das so verständlich?:thumbup: