image.onload-Funktion mit Rückkehr

7

Ich habe eine JS-Funktion, wo ein Wert berechnet wird und dieser Wert sollte zurückgegeben werden, aber ich bekomme jedes Mal undefined , aber wenn ich console.log() das Ergebnis innerhalb dieser Funktion, funktioniert es. Könntest du helfen?

%Vor%     
Poru 15.09.2011, 16:36
quelle

5 Antworten

3

Ich verstehe es selbst:

Ich wusste nicht, dass ich eine Variable zuweisen kann (für mich sieht bereits zugewiesen) onload.

%Vor%     
Poru 15.09.2011, 16:51
quelle
19

Der Wert wird zurückgegeben, aber nicht von der Funktion detect .

Wenn Sie eine benannte Funktion für den Load-Ereignishandler anstelle einer anonymen Funktion verwenden, wird deutlicher, was passiert:

%Vor%

Der Wert wird von der Funktion handleLoad an den Code zurückgegeben, der den Event-Handler aufruft, aber die Funktion detect wurde bereits davor beendet. Es gibt überhaupt keine return -Anweisung in der Funktion detect , Sie können also nicht erwarten, dass das Ergebnis irgendetwas anderes als undefined ist.

Eine übliche Methode zur Behandlung asynchroner Szenarien ist die Verwendung einer Callback-Funktion:

%Vor%

Sie rufen die Funktion detect mit einem Callback auf, das aufgerufen wird, sobald der Wert verfügbar ist:

%Vor%     
Guffa 15.09.2011 16:50
quelle
3

Dies liegt daran, dass die Funktion detect nichts zurückgibt, da das load-Ereignis nach dem Ende der Funktion auftritt. Und Sie haben vergessen, das Bild an etwas anzuhängen, damit es nie lädt.

Sie könnten etwas tun wie:

%Vor%

fiedle hier Ссылка

    
Nicola Peluchetti 15.09.2011 16:43
quelle
2

detect() gibt keinen Wert zurück. Wenn Sie eine Warnung erhalten möchten, ersetzen Sie return result; durch alert(result) .

Eine Analyse Ihres Codes:

%Vor%     
Rob W 15.09.2011 16:40
quelle
1

Ihre Funktion detect gibt nichts zurück, weshalb alert "undefined" anzeigt. Die return -Anweisung, von der Sie behaupten, dass sie nicht funktioniert, kommt von der anonymen Funktion zurück, die Sie image.onload zuweisen, und funktioniert wahrscheinlich gut, wenn Sie diese Funktion aufrufen würden.

    
Anomie 15.09.2011 16:40
quelle