Rolf B: Fehlerhafter Code

Beitrag lesen

Hallo Patrick,

ich gebe zu, die Fehler sind aus den Meldungen des Browsers nicht so einfach zu erkennen.

Fehler 1:

Uncaught SyntaxError: Unexpected end of input (at patrick.html:23:1)

Zeile 23 ist das </script> Tag. Dass ihm da ein } fehlt, um die schreibwas()-Funktion abzuschließen, geht aus der Fehlermeldung nur indirekt hervor.

Nach Korrektur kommt Fehler 2:

Uncaught TypeError: parseInt(...) is not a function
    at schreibwas (patrick.html:7:31)
    at HTMLAnchorElement.onclick (VM81 patrick.html:1:1)

Da denkt man dann: Hä? parseInt ist doch eine Funktion. Aber man muss genau hinschauen: er sagt nicht parseInt ist keine Funktion, sondern : parseInt(...) ist keine Funktion. Und das liegt daran, dass Du

parseInt(prompt)("Na,wie schnell waren Sie denn?","")

geschrieben hast. Was hier passiert, ist echt fies und bei Sprachen, die Funktionen als vollwertige Objekte behandeln, ein gelegentlich kniffliges Problem.

prompt ist eine Funktion, die global bekannt ist. Du rufst die Funktion parseInt auf und übergibst ihr diese Funktion (nicht ihr Ergebnis) als Parameter. Da parseInt aus einer Funktion keine Zahl herausdeuten kann, ist das Ergebnis NaN (Not a Number). Er versucht jetzt, diesen Ausdruck auszuwerten:

NaN("Na,wie schnell waren Sie denn?","")

Das sieht bekloppt aus - aber das weiß JavaScript vorher nicht. Hätte parseInt ein Funktionsobjekt zurückgegeben, dann wäre das Programm weitergelaufen, und es gibt durchaus Code, der solche Konstrukte nutzt. Dann kann man dem Code zwar nicht mehr ansehen, was er tun wird, aber, tja, es gibt Genies, die sowas bauen.

Aber es kommt eben NaN zurück, und das ist ein einfacher Wert und keine Funktion. Deshalb motzt er. Er hätte schreiben können "NaN is not a function". Tut er nicht, er sagt Dir, wie das NaN zu Stande gekommen ist: durch den Aufruf von parseInt(...).

Die richtige Schreibweise zu finden überlasse ich jetzt Dir.

Rolf

--
sumpsi - posui - obstruxi