function nieuwGetal(){
var g = Math.random()*50;
g = Math.round(g);
return g;
}
var getal = nieuwGetal();
this should return a new random number between 1 - 50 every time the function is called. It generates a new number but the number in "getal" stays the same. Any idea why this is and how I can make it behave differently?
your function works fine, the var getal gets assigned a value when you do var getal = nieuwGetal();
im guessing your doing this when the page loads, so getal will stay the same value untill the page is loaded again.
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Test</title>
<script type="text/javascript">
function nieuwGetal(){
var g = Math.random()*50;
g = Math.round(g);
return g;
}
var getal = nieuwGetal();
</script>
</head>
<body>
<div id="tester"></div>
<a onclick="document.getElementById('tester').innerHTML = nieuwGetal();return false;" href="#">maak een random nr aan</a>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Gokwerk</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" type="text/css" href="gokwerk.css" /><script type="text/javascript">
/* <![CDATA[ */
var teller = 0;
function nieuwGetal(){
teller = 0;
var g = Math.random()*50;
g = Math.round(g);
return g;
}
var getal = nieuwGetal();
function gokken(){
var antwoord = document.getElementById("antwoord");
var gok = document.getElementById("gok").value;
teller++;
if(gok > getal){
antwoord.value = "Jammer, maar helaas! Het getal dat we zoeken ligt LAGER!"
}
if(gok < getal){
antwoord.value = "Jammer, maar helaas! Het getal dat we zoeken ligt HOGER!"
}
if(gok == getal){
antwoord.value = "CORRECT! U hebt het getal in "+teller+" keer gevonden!"
}
}
/* ]]> */
</script></head><body><div id="wrapper"><form action=""><fieldset><legend>Gokwerk</legend><div id="text"><p>We hebben een willekeurig getal gekozen tussen 1 en 50. In hoeveel keer kan jij het raden?</p></div><div class="field"><input type="text" id="gok" name="gok" size="2" maxlength="2" /><label for="gok">Geef hier je gok in</label></div><div class="field"><input type="text" id="antwoord" name="antwoord" size="70" /><label for="antwoord">Antwoord</label></div><input type="button" class="button" value="Gokken" onclick="gokken()" /><input type="reset" class="button" id="reset" value="Opnieuw" onclick="nieuwGetal()" /></fieldset></form></div></body></html>
je controleerd in de gokfunctie op de variabele getal, die dient dus een nieuwe waarde te krijgen als je het opnieuw wilt spelen, je geeft een nieuwe waarde aan getal door "getal = nieuwGetal()" uit te voeren.
getal is een globale variabele, ik had ook "getal = nieuwGetal()" of zelfs "window.getal = window.nieuwGetal()" kunnen gebruiken (omdat deze beiden in de globale scope zijn gedefinieerd)
maar als je window.variabeleNaam gebruikt dan is het zeer duidelijk dat het om een globale variabele gaat en bij functies is dit minder gebruikelijk.
als je met frames werkt of popups dan zie je "window." vaker terugkomen, als jij bijv een popup maakt.
Code:
var a = 'blaat';
var p = window.open(..) ;
dan kan je nu in de popup window.opener.a aanroepen (die dan dus de waarde blaat heeft) hetzelfde met een functie, als jij de functie function tester(){alert('test'); } hebt gedefineerd kan je dus window.opener.tester(); aanroepen die dan test alert..
je controleerd in de gokfunctie op de variabele getal, die dient dus een nieuwe waarde te krijgen als je het opnieuw wilt spelen, je geeft een nieuwe waarde aan getal door "getal = nieuwGetal()" uit te voeren.
Is dit niet wat in de functie zelf al gebeurt? Je roept een functie aan die een nieuw getal genereert en die returned telkens een nieuwe waarde?
"var getal" zou toch op zich telkens een nieuwe waarde moeten krijgen zonder expliciete vermelding ? Anders lijkt mij die return in de functie toch een beetje overbodig of niet
Het window gedeelte snap ik nu wel dankzij je uitleg, maar ik begrijp nog steeds niet waarom je expliciet getal = nieuwGetal() en niet gewoon nieuwGetal() kan aanroepen. Hmm.
De variabele getal krijgt aan het begin van de code een waarde toegewezen door de functie nieuwGetal, deze waarde wordt eenmaal toegewezen als de javascript word geladen.
in function gokken(){ check je op de waarde van getal maar deze veranderd niet (dat wil je ook niet anders moet je wel erg veel gokken als er telkens met een ander getal wordt vergeleken).
door "window.getal = nieuweWaarde();" uit te voeren krijgt de variabele getal dus een nieuwe waarde en kan het gokspel opnieuw gespeeld worden..
als je in de functie nieuweWaarde alleen wilt uitvoeren zou je dus de functie moeten aanpassen
/* <![CDATA[ */
var teller = 0;
var getal;
function nieuwGetal(){
teller = 0;
var g = Math.random()*50;
g = Math.round(g); getal = g; ipv return g
}
De variabele getal krijgt aan het begin van de code een waarde toegewezen door de functie nieuwGetal, deze waarde wordt eenmaal toegewezen als de javascript word geladen.
Ooh ok, ik dacht dat er aan Getal telkens een nieuwe waarde werd toegekend wanneer de functie nieuwGetal() werd aangeroepen. Niet dus.
Bookmarks