Home | Inhoudsopgave | Playground | Opdrachten | Links |
Inhoud | Hoofdstuk 6 - Opdracht 4De opdracht:Maak twee functies, a() en b(). De functie a() zet een A op het scherm (met document.write()) en returnt true. Functie b() zet een B op het scherm en returnt false.Vervolgens kopieer je de volgende code: if(a() && b()) { document.write("<br />A && B"); } document.write("<br />"); if(a() || b()) { document.write("<br />A || B"); } document.write("<br />"); if(b() && a()) { document.write("<br />B && A"); } document.write("<br />"); if(b() || a()) { document.write("<br />B || A"); } document.write("<br />"); Voorspel de uitkomst van deze code (dus de tekst die op het scherm komt te staan). Daarna test je de code en verklaar je de uitkomst. Het antwoord:De uitkomst is als volgt:AB A A || B B BA B || A Je ziet dat soms de andere functie helemaal niet uitgevoerd wordt terwijl die wel in de vergelijking staat. Dit komt omdat je bij een vergelijking soms al kunt zeggen wat de uitkomst is als je alleen de waarde aan de linkerkant weet. Als je bij OF-operator aan de linkerkant al true hebt staan, dan is de uitkomst dus altijd true (want een van de twee is true). Dat betekent dat de functie aan de rechterkant niet meer uitgevoerd hoeft te worden, want de uitkomst daarvan maakt niet uit. Hetzelfde geldt voor de EN-operator, als er aan de linkerkant false staat is de uitkomst toch altijd false. Dus hoeft de rechterkant niet meer bekeken te worden. Hiermee kun je heel erg je voordeel doen. Stel je hebt een hele 'dure' functie (d.w.z: een functie die veel tijd kost omdat hij heel veel doet of een hoop gegevens moet verwerken) en je hebt een heel goedkope functie of zelfs alleen maar een variabele die een bepaalde waarde moet hebben. Dan kun je beter eerst een vergelijking op die variabele doen en daarna pas op die functie, zodat die functie alleen wordt uitgevoerd als het echt nodig is. Voorbeeld: je hebt een variabele hasPermissions die zegt of de gebruiker de rechten heeft bestanden te doorzoeken, en een functie searchBigFileFor() die naar een string in een groot bestand zoekt (en dus een 'dure' functie is). Dan kan je het beste op deze manier je vergelijking schrijven: if(hasPermissions && searchBigFileFor("Hello world!")) // Doorzoek het bestand alleen als je de permissies ervoor hebt { // Tekst gevonden, doe iets } |