Home | Inhoudsopgave | Playground | Opdrachten | Links |
Inhoud | 5. FunctiesJe hebt in de vorige hoofdstukken al een paar functies gebruikt, zoals alert en prompt. 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. Nu 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 toch telkens net wat anders doet, daarover meer in H5.4. In JavaScript bestaat een functie uit 3 delen. Het woord function, de functienaam en de parameters tussen haakjes: function functienaam (parameters). Wat die parameters precies zijn wordt in H5.4 uitgelegd. 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. Je ziet namelijk meteen wanneer de code die bij een fucntie hoort begint en waar die eindigt. Met name bij grotere stukken code is inspringen binnen accolades zeer belangrijk! 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: Noem de functie, inclusief de haakjes openen en sluiten, met daartussen eventueel een of meerdere expressies 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. 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 als het ware op zijn plaats te staan; de functieaanroep heeft een waarde gekregen en is dus een expressie. 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. 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. 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 een zogenaamde scope. De scope van een variabele is het stuk code waarin de variabele bestaat en dus gebruikt kan worden. Je kan eigenlijk stellen dat de scope van een bepaalde variabele loopt 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 twee 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. ExpressiesAlles dat een waarde heeft noemen we een expressie. Dat geldt niet alleen voor eenvoudige getallen en stukken tekst (strings), maar ook voor berekeningen en aanroepen van functies die een waarde teruggeven, zoals prompt en parseInt.Naar boven 5.7. Functie parseIntAls je via prompt om twee getallen vraagt en deze op wilt tellen, dan gaat het fout. De antwoorden die gegeven worden, worden namelijk als een string gezien. En twee strings 'optellen' betekent aan elkaar vast maken. Als je in onderstaand voorbeeld de getallen 6 en 7 invult, dan krijg je 67 te zien. JavaScript:
Om een string om te zetten naar een getal gebruiken we parseInt(): JavaScript:
Als je geen getallen hebt ingevoerd krijg je NaN als resultaat (Not a Number). Je kan prompt en parseInt ook combineren in één statement. JavaScript:
De functie prompt geeft iets terug, de aanroep van die functie krijgt dus een waarde, en is dus een expressie. En die expressie kan weer als argument worden doorgegeven aan de functie parseInt. Naar boven5.8. Opdrachten
|