Kleines JS Problem: return?

Kaito

Aktives Mitglied
Thread Starter
Mitglied seit
31.12.2005
Beiträge
7.020
Tag, mithilfe von Selfhtml habe ich mir eine Fkt gebastelt, die eine bestimmte zuvor eingegebene, Antwort aus besagtem Cookie ausliest.
Da nicht alles funktioniert hat wie ich wollte und JS keine Fehler ausgibt, hab ich mal alles mit alerts vollgestopft um zu sehen wo der Fehler liegt.
Ergebnis: alle alerts funzen, bis auf den nach "return".

Code:
function kekslesen() {
alert(antwort1);
  var antwort1 = "";
alert(antwort1);
  if (document.cookie) {
    var antwort1Start = document.cookie.indexOf("=") + 1;
    var antwort1Ende = document.cookie.indexOf(";");
    if (antwort1Ende == -1) {
      antwort1Ende = document.cookie.length; }
    antwort1 = document.cookie.substring(antwort1Start, antwort1Ende);
  }
alert(antwort1);
  return antwort1;
alert(antwort1);
}
Nun meine Frage: wozu dient "return?
Das mit den Substrings versteh ich ja, aber return?
Also aus einer anderen Sprache weiß ich: return gibt die Variable zurück.
Zurück an was?
Oder bedeutet das nun ich kann in der Fktn darunter function xy (var) schreiben, wobei var die eben zurückgegebene (über return) Variable ist?
Und wieso kann ich mittels alert() nicht mehr auf die Variable zugreifen nachdem sie zurückgegeben wurde? Bzw. es kommt ja nicht "nichts" sondern es kommt gar kein Fenster, also muss ja etwas falsch sein.
 

iRocko

unregistriert
Mitglied seit
11.06.2008
Beiträge
610
Hi.

"return" gibt die Variable an den Aufruf zurück. Beispiel:

Code:
function say_hello(name) {
    var text = "Hello "+name;
    return text;
}

var myHello = say_hello("Klaus");
In "myHello" sollte dann "Hello Klaus" stehen.
Nach returns wird dann auch nichts mehr ausgeführt.
 

Kaito

Aktives Mitglied
Thread Starter
Mitglied seit
31.12.2005
Beiträge
7.020
Ah okay, ich glaub ich habs nun verstanden, danke,
habe inzw. aber wieder ein neues Problem was mir einfach nicht einleuchten will...

(wird im body mit onload aufgerufen)
Code:
function autoweiterleiten() {
if (document.cookie) {
kekslesen();
else { 
window.location.href = "index.html";
}
}
}
Sinn: ist ein Cookie vorhanden soll kekslesen() laufen, ist kein Cookie vorhanden soll man auf die index.html kommen (dort wird der Cookie dann gesetzt).
Im "ja"-Fall der if Fkt funktioniert alles, nur wenn kein Cookie vorhanden ist, passiert nichts.
Ich hab absolut keine Ahnung wieso, index.html existiert, beide Dateien liegen im selben Verzeichnis und
Code:
[...]
window.location.href = "index2.html"; 
[...]
aus der index.html funktioniert problemlos.
 
D

dms

Wird da keine Fehlermeldung geworfen?

Dein Problem sind die Klammern.

Du solltest Dir angewöhnen Deinen Code ordentlich zu formatieren/einzurücken. Dann fällt Dir sowas auch sofort auf.
Code:
function autoweiterleiten() [COLOR="Blue"]{[/COLOR]
   if (document.cookie) [COLOR="Red"]{[/COLOR]
      kekslesen();
   [COLOR="#ff0000"]}[/COLOR]
   else [COLOR="Yellow"]{[/COLOR] 
      window.location.href = "index.html";
   [COLOR="#ffff00"]}[/COLOR]
[COLOR="#0000ff"]}[/COLOR]
 

Kaito

Aktives Mitglied
Thread Starter
Mitglied seit
31.12.2005
Beiträge
7.020
Fehlermeldung in js?^^
Hab noch nie eine gesehen.

Vielen Dank, hab ich gar nicht bemerkt, Einrücken... hab ich bisher nie getan, weiß auch nicht so recht was ich nun wie einrücken sollte.
 
D

dms

Da fehlen Dir die zwei wichtigsten Punkte beim Entwickeln. :)

Fehlermeldung in js?^^
Hab noch nie eine gesehen.
Opera: Extras->Weiteres->Fehlerkonsole
Firefox: Extras->Fehler-Konsole
Safari: Develop->Fehlekonsole einblenden (Zuvor im Terminal aktivieren mit defaults write com.apple.Safari IncludeDebugMenu 1)
IE: Links unten auf das Status-Icon doppelklicken

Einrücken... hab ich bisher nie getan, weiß auch nicht so recht was ich nun wie einrücken sollte.
Quelltextformatierung
 

iRocko

unregistriert
Mitglied seit
11.06.2008
Beiträge
610
Einrücken... hab ich bisher nie getan
Aiaiai... Dann gewöhn's dir schnellstens an!
Glaub mir, ohne vernünftig formatierten Quelltext bist du irgendwann aufgeschmissen.

Ich stell mir grad Python ohne Einrückung vor...:hehehe:
 
Oben