• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Funktion vorhanden/nicht vorhanden

znieh99

New member
Ich habe ein seltsames Problem mit dem Standort einer Funktion. Ist die Funktion innerhalb der $(document).ready Funktion aktiviert und die äußere als Kommentar gekennzeichnet dann wird der Funktionsaufruf nicht erkannt. Ist jedoch die innere Funktion als Kommentar und die äußere aktiv, dann funktioniert es. Kann das jemand erklären?
In der Folge ein Auszug des Codes.

Code:
$(document).ready( function() {
    myPoint = new Point();
    
    Point = function(x, y) {
        this.x = x || 0;
        this.y = y || 0;
    };
});

//Point = function(x, y) {
//    this.x = x || 0;
//    this.y = y || 0;
//};
 
die äußere funktion liegt global, der code wird abgearbeitet wenn die datei im html-code "an die reihe kommt"(geladen und geparst wurde). die funktion die du an ready übergibst wird abgearbeitet, wenn onreadystatechanged als event kommt.
damit ist in dem fall, wo die funktion außen steht an der stelle wo du myPoint = new Point(); schreibst schon eine variable Point hinter der sich die funktion verbirgt vorhanden.
im fall wo beides im ready steht, ist an der stelle "eigentlich" noch keine variable Point vorhanden, da diese erst nach der stelle belegt wird.
jetzt muss ich das "eigentlich" noch erklären, in wirklichkeit ist zu diesem zeitpunkt die variable Point schon vorhanden, da js alle variablendeklarationen einer funktion an den anfang dieser funktion zieht. das nennt sich hoisting. deswegen würde das
Code:
$(document).ready( function() {
    myPoint = new Point();
    
    function Point(x, y) {
        this.x = x || 0;
        this.y = y || 0;
    };
});
auch wieder funktionieren. da funktionsdeklarationen komplett hochgezogen werden müssen, zuweisungen von functionexpressions auf variablen aber nicht, da ersteres eine anweisung ist, letzteres mehrere(variablendeclaration, functionexpression und assignment).

- - - Aktualisiert - - -

DOMContentLoaded, nicht readystatechange
 
Zurück
Oben