Warum ist meine JavaScript-Funktion manchmal „nicht definiert“?

Ich rufe meine JavaScript-Funktion auf. Warum erhalte ich manchmal die Fehlermeldung „Meine Funktion ist nicht definiert“, wenn sie definiert wird?

Zum Beispiel. Ich bekomme gelegentlich „copyArray ist nicht definiert“, selbst in diesem Beispiel:

function copyArray( pa ) {
    var la = [];
    for (var i=0; i < pa.length; i++)
        la.push( pa[i] );
    return la;
}

Function.prototype.bind = function( po ) {
    var __method = this;
    var __args = [];

    // Sometimes errors -- in practice I inline the function as a workaround.
    __args = copyArray( arguments );

    return function() {
        /* bind logic omitted for brevity */
    }
}

Wie Sie sehen, ist copyArray genau dort definiert, daher kann es sich nicht um die Reihenfolge handeln, in der Skriptdateien geladen werden.

Ich habe dies in Situationen erhalten, in denen es schwieriger ist, umzugehen, wenn sich die aufrufende Funktion in einer anderen Datei befindet, die nach der aufgerufenen Funktion geladen werden sollte. Dies war jedoch der einfachste Fall, den ich vorstellen konnte, und scheint das gleiche Problem zu sein.

Dies geschieht nicht zu 100%, daher vermute ich ein Problem im Zusammenhang mit dem Last-Timing. Aber ich habe keine Ahnung was.

@ Hojou: Das ist ein Teil des Problems. Die Funktion, bei der ich jetzt diesen Fehler erhalte, ist selbst mein addLoadEvent, das im Grunde eine Standardversion der allgemeinen Bibliotheksfunktion ist.

@ James: Ich verstehe das und es gibt keinen Syntaxfehler in der Funktion. Wenn dies der Fall ist, wird auch der Syntaxfehler gemeldet. In diesem Fall erhalte ich nur den Fehler „nicht definiert“.

@David: Das Skript befindet sich in diesem Fall in einer externen Datei, auf die mit dem normalen < Skript verwiesen wird. Src = "file.js" > < / script > Methode im Kopfbereich der Seite.

@Douglas: Interessante Idee, aber wenn dies der Fall wäre, wie könnten wir jemals eine benutzerdefinierte Funktion mit Zuversicht nennen? Auf jeden Fall habe ich es versucht und es hat nicht funktioniert.

@sk: Diese Technik wurde in verschiedenen Browsern getestet und wird grundsätzlich aus der Prototype-Bibliothek kopiert.

Dies sollte nicht möglich sein, wenn Sie nur die Skripts auf der Seite einfügen.

Die Funktion „copyArray“ sollte immer verfügbar sein, wenn der JavaScript-Code ausgeführt wird, unabhängig davon, ob er vor oder nach der Deklaration deklariert wurde – es sei denn, Sie laden die JavaScript-Dateien dynamisch in eine Abhängigkeitsbibliothek. In diesem Fall gibt es alle möglichen Probleme mit dem Timing.

Ursprüngliche URL:https://stackoverflow.com/questions/153909/why-is-my-javascript-function-sometimes-not-defined

Zitieren Sie bitte die URL dieses Artikels: Warum ist meine JavaScript-Funktion manchmal „nicht definiert“?