Die Zerlegung eines Programms in kleine, logische zusammengehörende Blöcke wird prozedurale Programmierung genannt. Eine prozedurale Programmiersprache besitzt im Rahmen ihres Sprachumfangs die Möglichkeit zur Definition sogenannter Prozeduren.
Im Sinne dieser Definition ist Javascript eine prozedurale Programmiersprache.
Javascript unterstützt mittels des reservierten Worts function
das Konzept der prozeduralen Programmierung.
Eine Funktion
Syntax
function Name(arg1, arg2, ..., argN) { Anweisungen; return wert; }
function
.return
erlaubt, das einen sofortigen Abbruch der Anweisungsausführung bewirkt. Innerhalb des Funktionsblocks werden die Argumente wie gewöhnliche Variablen verwendet.function Square(x) { return x*x; } function InputNumber(prompt) { var num; while (isNaN(num = parseFloat(window.prompt(prompt, "")))) window.alert("input valid number please!"); return num; var f1 = function(x) { return 2*x*x*x - 3*x*x + 4*x - 5; }, f2 = function(x) { return 2*x*x - 3*x + 4; }; var Pkt = { x: 10, y: 12, len: function() { return Math.sqrt(Pkt.x*Pkt.x + Pkt.y*Pkt.y); } };
Syntax
Name(expr1, expr2, ..., exprN)
undefined
.return
Wert. Besitzt eine Funktion keine oder eine leere return
Anweisung, dann ist der Wert undefined
.function f(a,b) { return a * b; } f(1+2, 9%5); // 12 f(Math.sqrt(36), 6-9); // -18 f(42); // NaN typeof f(1,2); // "number" function f(a,b,c) { alert(""+a+b+c); } f(1,2,3); // "123" f(1,2); // "12undefined" f(1,,3); // syntax error typeof f(1,2,3); // undefined
Beispiel
var x=42, y=12, gruss="Hallo", a="a"; function Test(a, b) { var y=24, gruss="Helau"; alert([x,y,a,b,gruss]); } Test("b","c"); // 42,24,b,c,Helau
Was passiert mit dem Wert einer Variablen, die als Argument an eine Funktion übergeben und innerhalb der Funktion verändert wird?
Beispiel
var n = 42, w = true, s = "Hallo", arr = [1,2,3], pnt = {x:25, y:12}; function f(a,b,c,d,e) { a = 43; b = false; c = "Helau"; d[0] = -1; d.push(4); e.x = 24; e.z = 0; } f(n,w,s,arr,pnt); alert(n); // 42 alert(w); // true alert(s); // "Hallo" alert(d); // -1,2,3,4 alert(pnt.x+","+pnt.y+","+pnt.z); // 24,12,0
Beispiele
var f1 = function(x) { return 2*x*x*x - 3*x*x + 4*x - 5; }, f2 = function(x) { return 2*x*x - 3*x + 4; }; function Calculate(x, f) { return f(x); } Calculate(2, f1); // 7 Calculate(2, f2); // 6 var arr = [7,4,5,12,3]; arr.sort(function(a,b){ return a-b; }); // numerisch aufsteigend
Funktionen, die sich selbst aufrufen, heissen rekursive Funktionen. Die Rekursion ist häufig eine Alterbative zur Iteration (Bearbeitung mittrls Schleife). Die Rekursion muss eine Abbruchbedingung enthalten, um eine unendliche Rekursion zu vermeiden.
Beispiel
function Faculty(n) { if (n > 1) return n*Faculty(n-1); else return 1; } function Fibonacci(n) { if (n > 1) return Fibonacci(n-2) + Fibonacci(n-1); else return 1; } for (var i=1; i<6; i++) document.write(Faculty(i) + ", "); // 1, 2, 6, 24, 120, for (var i=0; i<5; i++) document.write(Fibonacci(i) + ", "); // 1, 1, 2, 3, 5,