Home | Inhoudsopgave | Playground | Opdrachten | Links |
Inhoud | 5. FunctiesJe hebt al eens eerder functies gebruikt, zonder dat je het wist. Maar wat functies precies zijn, wat je er mee kan, hoe je ze maakt en hoe je ze gebruikt wordt in dit hoofdstuk uitgelegd. Naar boven5.1. Wat is een functie?Een functie is eigenlijk een stukje code met een naam, zodat je die code makkelijk later nog eens kan gebruiken zonder hem helemaal overnieuw te moeten schrijven. Nou kan je natuurlijk alles kopiëren en plakken, maar als je dan wat wil wijzigen moet dat op al die verschillende plekken en bovendien is het waarschijnlijk niet overzichtelijk. Maar nog belangrijker is dat je de functie zo kan maken dat de code die uitgevoerd wordt wel hetzelfde is maar telkens net wat anders doet, daarover meer in H5.4. In JavaScript bestaat een functie uit 2 delen. De naam, en de argumenten tussen haakjes: functie(argumenten). Wat die argumenten dus precies zijn wordt in H5.4 uitgelegd. Deze notatie zal je waarschijnlijk wel bekend voorkomen van bijvoorbeeld alert en prompt. Voor het maken van een naam voor zo'n functie gelden dezelfde regels als voor het maken van een naam voor een variabele (zie H4.2). Hierbij geldt echter wel dat een variabele niet dezelfde naam als een functie mag hebben, en een functie mag niet dezelfde naam als een variabele hebben. Anders weet de browser niet wat je nou bedoelt, de variabele of de functie. Naar boven5.2. Functies maken en gebruikenWanneer je een variabele aanmaakt gebruik je het woordje var ervoor (H4.2), zo gebruik je wanneer je een functie maakt het woordje function ervoor. Daarna komt dus de naam van de functie en daarna volgen de haakjes (in H5.4 zul je zien waar die haakjes voor dienen): JavaScript:
Om nu code aan deze functie toe te wijzen moeten we eerst aangeven welke code er bij die functie hoort. Hiervoor type je eerst een { om aan te geven dat de code daar begint en na de code die bij deze functie hoort type je een }. Het is handig eerst { } te typen en daarna pas de code ertussen te zetten, zo vergeet je nooit de } op het laatst (wat anders nog wel eens wil gebeuren). JavaScript:
Het is een goede gewoonte een tab in te springen binnen de accolades (dus voor elke regel code een tab zetten), zo hou je de code overzichtelijker. Wat kan er nou als code in zo'n functie staan? Eigenlijk alle code die je normaal ook kan schrijven: JavaScript:
Het aanroepen van een zelfgemaakte functie gaat zoals je gewend bent van de ingebouwde functies JavaScript:
Normaliter wordt code uitgevoerd zodra de browser die code tegenkomt. Dat geldt niet voor code in een functie, die wordt pas uitgevoerd zodra de functie aangeroepen wordt. Naar boven5.3. Functies die iets teruggevenEen functie kan ook een bepaalde waarde teruggeven. Dat doet prompt bijvoorbeeld. Het teruggeven van een waarde gebeurt met return en daarachter komt dan de waarde die teruggegeven moet worden. De functie stopt ook gelijk als hij een return tegenkomt, daar wordt ook veel gebruik van gemaakt door return; aan te roepen. Nu staat er geen waarde achter return, dus wordt er niks teruggegeven door de functie maar de functie wordt wel op die plek beëindigd. JavaScript:
Het aanroepen van zo'n functie heb je al eens gedaan, en is dan ook eigenlijk niks nieuws. Nadat een functie die een waarde teruggeeft aangeroepen is, komt de waarde die de functie teruggeeft op zijn plaats te staan. Dit zag je al gebeuren in H4.3, nadat prompt() is aangeroepen wordt de waarde die in zijn plaats komt opgeslagen in een variabele. JavaScript:
Merk op dat document.write() een punt in zijn naam heeft, en volgens de regels voor de naamgeving mag dat helemaal niet. Wat die punt daar betekent, en hoe dat kan wordt uitgelegd in H9.3 en H9.4 en is nu nog niet van belang. De code in zo'n functie wordt pas uitgevoerd zodra die functie wordt aangeroepen. In tegenstelling tot wat tot nu toe gebeurde, namelijk dat de code werd uitgevoerd zodra de browser die code leest. Merk op dat niet alle functies na te bouwen zijn. Het is bijvoorbeeld onmogelijk om alert of prompt na te maken. Dat zou ook volstrekt onnodig zijn want die bestaan immers al. Deze functies zijn al ingebouwd door de browser en hebben een ander soort code in hun kern (zoals bijvoorbeeld C++). Naar boven5.4. Parameters en argumentenJe maakt vaak een functie om iets wat vaak moet gebeuren in een stukje code te kunnen stoppen. Maar soms moet er telkens net iets anders gebeuren. Een voorbeeld hiervan is alert(), die geeft elke keer dat hij wordt aangeroepen een pop-up met een tekst. Maar hij doet niet elke keer precies hetzelfde, er staat namelijk elke keer een andere tekst in de pop-up. Het zou vrij onhandig (noem het maar: onmogelijk) zijn als je voor elke tekst die in zo'n pop-up kan verschijnen een andere functie moet maken. Daarvoor zijn de parameters en argumenten bedacht. Een argument is een waarde die meegegeven wordt aan een functie bij het aanroepen van de functie. Een parameter is een onbekende variabele waarop een functie zijn uitvoer baseert. Een parameter wordt dus eigenlijk een argument genoemd zodra de functie wordt aangeroepen en het dus bekend is welke waarde de parameter heeft. Soms kan een functie meerdere parameters hebben (zoals prompt()) JavaScript:
Argumenten worden dus gescheiden door komma's. Ze kunnen elk soort waarde bevatten, een getal, een string of nog iets anders (andere datatypen worden later besproken). Als je zelf een functie maakt die gebruik maakt van parameters, zet je die parameters tussen de haakjes. Je geeft elke parameter een naam, waarbij weer dezelfde regels gelden als bij het geven van een naam aan een variabele of functie. De parameters zijn dan als gewone variabelen binnen de code van de functie beschikbaar: JavaScript:
5.5. De scope van variabelenVariabelen zijn niet overal zichtbaar of te gebruiken, ze hebben dus een zogenaamde scope. De scope van een variabele is het stuk code waarin de variabele bestaat en dus gebruikt kan worden. Je kan eigenlijk zeggen dat de scope van een variabele is vanaf het punt waar hij aangemaakt wordt tot de sluitende } van de {} waar hij tussen staat: JavaScript:
Nou zie je dus dat variabele a door het hele script heen bestaat en dus vanuit alle functies gebruikt en gewijzigd kan worden. Dat komt omdat a globaal is aangemaakt zoals dat heet. Het is dus een variabele die niet in een functie is aangemaakt en dus overal bekend is. Er zijn 2 verschillende variabelen b. Eentje als parameter van de functie f, en de ander als parameter van de functie g. Maar ze hebben niks met elkaar te maken. Want ze worden telkens aan het begin van de functie aangemaakt, en aan het einde (bij de sluitende }) vernietigd. Verder kent functie f ook nog de variabele c, die wordt binnen in die functie aangemaakt en zal dus ook aan het einde vernietigd worden. Waardoor die niet bruikbaar is buiten de functie. JavaScript:
5.6. Opdrachten
|