Kan iemand mij iets meer uitleggen waarom onderstaande niet werkt
ik krijg als error dat centerPos is undefind . nu heb ik iets gelzen dat een var die binnen een andere functie aangemaakt word niet zichtbaar is buiten deze functie . maar hoe krijg ik nu de var centerPos in een andere functie om deze te gebruiken in mij map_options. ik snap de logica nog niet helemaal van javascript en functions .
hoop dat iemand mij kan helpen alvast bedankt
<?php
function initialize() {
mylocation = navigator.geolocation;
mylocation.getCurrentPosition(success, fail);
function success(position){
var myLat = position.coords.latitude;
var myLong = position.coords.longitude;
var coords = new google.maps.LatLng(myLat, myLong);
var centerPos = new google.maps.LatLng(52.132633, 5.2912659999999505);
}
function fail(position){
var centerPos = new google.maps.LatLng(52.132633, 5.2912659999999505);
}
var map_canvas = document.getElementById('map_canvas');
oke. Maar zoals het uitgelegd werd in een tutorial die ik bekeken heb is position een parameter van de navigator.geolocation.getCurrentPosition(getLocation, locationFail);
En hoe komt het dat als ik de console.log oproep in de function getLocation dat ik wel de waardes te zien krijg ?
Hierop is 1 uitzondering: Anonymous functions krijgen toegang tot de variabelen van de scope waarin ze gedefinieerd zijn:
[code lang=js]
var a = 'foo';
// we slaan nu een Anonymous function op in de variabele b ipv een functie b aanmaken
var b = function () {
alert(a); // "foo"
};[/code]
Wanneer je een variabele definieerd zonder "var" definieer je ze altijd in de global scope (de global scope is overal beschikbaar):
[code lang=js]
a = 'foo';
function b() {
alert(a);
}
b(); // "foo"[/code]
[code lang=js]
function b() {
a = 'bar';
}
b();
alert(a); // "bar"[/code]
Global leaking zoals dat heet, het gebruiken van globale variabelen binnen een functie, moet je altijd vermeiden. Je functie moet namelijk niet afhankelijk zijn van de context waarin hij wordt uitgevoerd, je moet hem in elk willekeurig javascript script kunnen plaatsen zonder dat zijn gedrag anders is.
Bedankt voor je uitleg (excuses kwam misschien een beetje opdringerig over). Maar als ik dan naar onderstaand stukje kijk met vertaling naar je uitleg
er word een variable gedefineerd zonder var(in de global scope ) in de" function position". kan ik deze dan alleen oproepen binnen de function position en niet buiten de function ?
<?php
function initialize() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(position);
}
function position(position){
myLat = position.coords.latitude;
console.log(myLat); //wel werkend // (console 51.826433117
}
console.log(myLat);//Niet werkend //myLat is not defined
}
?>
ik ben het niet eens met het verhaal van Wouter.
Ik heb even een test script gemaakt.
<script>
var x = 10;
function test1()
{
var x = 99;
document.write(x + ' ');
}
function test2()
{
document.write(x + ' ');
x++;
}
function test3()
{
document.write(x + ' ');
}
test1();
test2();
test3();
</script>
de output hiervan is
99 10 11
Globaal wordt een var x aangemaakt met de waarde 10.
test1().
deze functie maakt een var genaamd x aan binnen zijn eigen scope met de waarde 99.
Dit wordt dan ook geprint.
Dat er globaal ook een var met de naam x is, beïnvloed elkaar niet: die krijgt niet ineens de waarde 99.
Dat zien we bij de functie test2()
die kent van zichzelf niet een var met de naam x en haalt deze dus "van buiten".
x is nog steeds 10 en dat komt op het scherm.
Daarna verhoogt test2() ook nog eens de waarde (naar 11).
dan komt test3() aan de beurt.
Ook die moet het doen zonder lokale x en haalt hem ook van buiten net als test2()
x is inmiddels 11 geworden, en dat wordt door test3() op het scherm geplaatst.
Toevoeging op 15/08/2014 09:58:46:
dit gaat dus alleen om Wouters eerste blokje code.