Funktionsdeklarationen in JavaScript
nachgeprüft-richtige Begriffe „Funktion“, „Funktionsdeklaration“
Funktionsausdrücke
> wurden schon behandelt
MDN: function expression (function operator)
- main.js
"use strict";
document.writeln( "alpha" );
- Ausgabe
alpha
- main.js
"use strict";
(
function (){ "use strict"; console.log( "alpha" ); }
)
();- Ausgabe
alpha
Der innere Name
Der innere Name wird nicht außerhalb der Funktion als Name definiert.
- main.js
"use strict";
(
function thisFunction(){ "use strict"; console.log( thisFunction ); }
)
();- Ausgabe
function thisFunction()
- main.js
thisFunction
- Ausgabe
ReferenceError: thisFunction is not defined
Ausgabe einer Funktion
- main.js
"use strict";
document.writeln
(
function (){ "use strict"; document.writeln( "alpha" ); }
);- Ausgabe
function (){ "use strict"; document.writeln( "alpha" ); }
- Allgemeines Muster
f = function g(){ }
Der innere Name »g« kann nur innerhalb des Rumpfes der Funktion verwendet werden, er wird nicht als globaler Name angelegt.
Funktionsdeklarationen
MDN: function declaration (function statement)
- main.js
"use strict";
function write_pi(){ "use strict"; document.writeln( Math.PI ); }
write_pi();
document.writeln( write_pi );
- Ausgabe
3.141592653589793
function write_pi(){ "use strict"; document.writeln( Math.PI ); }
Nicht vergessen, »function« vor jede Funktionsdeklaration zu schreiben!
Solche äußere Funktionsdefinition werden im Hauptverzeichnis (»this«) eingetragen
function f(){}
ist praktisch eine Abkürzung für
f = function f(){}
- Protokoll
function change( v ){ "use strict"; v = 5; document.writeln( v ); }
undefined
Ist die obige Funktion nun definiert oder nicht?
- Sequenz mit Funktionsdeklaration in erster Zeile
- main.js
"use strict";
function write_pi(){ "use strict"; console.trace(); document.writeln( Math.PI ); }
write_pi();- Ausgabe
3.141592653589793
- Schlüsselwörter
typeof, function
- Namen dürfen auch Ziffern (jedoch diese nicht am Anfang), Grundstriche »_«, und Dollarzeichen »$« enthalten
- main.js
"use strict";
function $$_22$(){ "use strict"; document.writeln( 3 * Math.PI ); }
$$_22$();- Ausgabe
3.141592653589793
- Schlüsselwörter
typeof, function
- Leere Funktionen
- main.js
"use strict";
function empty() {}
function empty1(){ "use strict"; }- Rekursive Funktion
- main.js
"use strict";
function dot(){ "use strict"; document.writeln( "." ); dot(); }
dot();- Ausgabe
..............................................
“too much recursion ”
- Aufrufhierarchie (oben, unten, „von unten nach oben“, „von oben nach unten“)
- main.js
"use strict";
function unten(){ "use strict"; document.writeln( "unten" ); }
function oben(){ "use strict"; document.writeln( "oben" ); bottom(); }
oben();- Quelltextausgabe
oben
unten- Weiterleitungsfunktion
- main.js
"use strict";
function writeln(){ "use strict"; document.writeln() }
writeln();- Quelltextausgabe
- (Leerzeile)
document.writeln()
Refaktoren: Umbenennen einer Funktion, Verschieben einer Funktionsdeklaration, Kommentar in Funktionsnamen wandeln, Auslagern in Funktion (extract function), Sandwich pattern,
Übungsfragen
- ? Was ist die Ausgabe des folgenden Skripts?
- main.js
"use strict";
function beta(){ "use strict"; document.writeln( "beta" ); }
function main(){ "use strict"; document.writeln( "alpha" ); }
main();- ? Was ist die Ausgabe des folgenden Skripts?
- main.js
"use strict";
function beta(){ "use strict"; document.writeln( "beta" ); }
function zeta(){ "use strict"; beta(); beta(); }
function main(){ "use strict"; beta(); zeta(); }
main();- ? Was ist die Ausgabe des folgenden Skripts?
- main.js
"use strict";
function beta(){ "use strict"; document.write( "[" ); document.write( "]" ); }
function main(){ "use strict"; document.write( "[" ); beta(); document.write( "]" ); }
main();
Übungsaufgaben
Um die richtige Syntax zu erhalten, ist es empfehlenswert, eines der Beispielskripte aus dieser Lektion zu kopieren, und dies schrittweise umzuarbeiten.
- / Textausgabe
- Schreiben Sie eine Deklaration einer Funktion namens »helloWord«, so daß die Auswertung des Aufrufausdrucks »helloWorld()« den Text »hello, world« ausgibt.
Zusatzaufgaben
- / Funktion deklarieren
- Schreiben Sie das folgende Skript so um, daß sich wiederholende Anweisungen von einer Funktion ausgeführt werden, die dann wiederholt aufgerufen wird (bzw. aufgerufen werden). Das Umschreiben soll die Ausgabe des Skripts nicht verändern. Es sollte möglichst nur eine einzige weitere Funktion zu der Klasse hinzugefügt werden.
Script
document.writeln( "Tomaten" );
document.writeln( "Rotkohl Gruenkohl" );
document.writeln( "Gurken" );
document.writeln( "Tomaten" );
document.writeln( "Rotkohl Gruenkohl" );
document.writeln( "Spinat" );
document.writeln( "Tomaten" );
document.writeln( "Rotkohl Gruenkohl" );
document.writeln( "Kohlrabi" );- Ausgabe
Tomaten
Rotkohl Gruenkohl
Gurken
Tomaten
Rotkohl Gruenkohl
Spinat
Tomaten
Rotkohl Gruenkohl
Kohlrabi- Hinweis Falls die Aufgabe schwerfällt, kann das am Anfang dieser Lektion stehende Beispielskript mit der Funktion »refrainAusgeben« als Vorlage für die Lösung verwendet werden, indem darin schrittweise die Texte durch die für die Lösung dieser Aufgabe passende Texte ersetzt werden.
Die folgende Übungsaufgabe gehört zum roten Faden „Würfeln“.
- / Würfelfunktion
- Schreiben Sie eine Wirkfunktion, welche eine Pseudozufallszahl ausgibt, die zwischen 1.0 (einschließlich) und 7.0 (ausschließlich) liegt. Nach jedem Aufruf der Funktion soll also eine Zahl ausgegeben werden, deren Vorkommastelle zwischen 1 (einschließlich) und 6 (einschließlich) liegt, wobei jeder der Werte 1, 2, 3, 4, 5 und 6 mit gleicher Wahrscheinlichkeit als Vorkommastelle vorkommt.