Hulp uitleg Var en functions

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan H

stefan H

14/08/2014 13:05:09
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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');
        
        var
map_options = {
          center: centerPos,
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
    
        var
map = new google.maps.Map(map_canvas, map_options);
    
        var
point = new google.maps.LatLng(51.85773469999999, 4.564891699999976)
        var
marker = new google.maps.Marker({    
            position : point,
            map : map
        });
      }


    google.maps.event.addDomListener(window, 'load', initialize);
?>
 
PHP hulp

PHP hulp

29/04/2024 09:58:13
 
- SanThe -

- SanThe -

14/08/2014 13:09:26
Quote Anchor link
Het woordje var weghalen.
 
Ivo P

Ivo P

14/08/2014 13:11:38
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
var centerPos;

function success()
{
   centerPos = new google.maps.LatLng(52.132633, 5.2912659999999505);
}


hiermee wordt in de global space een var centerPos aangemaakt.

Als je binnen je functie "var" weglaat, dan verwijs je dus naar de var uit de bovenliggende variabelen-ruimte.

vergelijkbaar met in php in je functie middels Global een var binnen te halen. Maar dan automatisch.

is wel gevaarlijk op het moment dat je per ongeluk "var" vergeet en daarmee een globale var overschrijft
 
Stefan H

stefan H

14/08/2014 14:44:34
Quote Anchor link
bedankt voor de uitleg,

heb nu onder staande maar krijg nog steeds undefined in mijn console

Ziet iemand wat er hier fout is ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
function initialize() {
var
centerPos;

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(getLocation, locationFail);
    }

    else {
    }

//end check location

function getLocation(position){
    var
latitude = position.coords.latitude;
    var
longitude = position.coords.longitude;
    
    centerPos = new google.maps.LatLng(latitude, longitude)
}
function
locationFail(){
    
}
var
map_canvas = document.getElementById('map_canvas');
        console.log(centerPos)
        var
map_options = {
          center: new google.maps.LatLng(52.132633, 5.2912659999999505),
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
    
        var
map = new google.maps.Map(map_canvas, map_options);
    
        var
point = new google.maps.LatLng(51.85773469999999, 4.564891699999976)
        var
marker = new google.maps.Marker({    
            position : point,
            map : map
        });
      }

?>
 
Ivo P

Ivo P

14/08/2014 14:47:19
Quote Anchor link
ze heb dan ook nog steeds "var centerPos" IN je functie staan...
 
- SanThe -

- SanThe -

14/08/2014 14:48:50
Quote Anchor link
function initialize() {
var centerPos;

Dus alleen bekent in de function().
 
Stefan H

stefan H

14/08/2014 14:51:52
Quote Anchor link
hier de var weggehaald maar krijg dan als ik de console.log op een andere plek zet undefined
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
function initialize() {

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(getLocation, locationFail);
    }

    else {
    }

//end check location

function getLocation(position){
    var
myLat = position.coords.latitude;
    var
myLng = position.coords.longitude;
    
    centerPos = new google.maps.LatLng(myLat, myLng)
     console.log(centerPos);
}
function
locationFail(){
    
}
var
map_canvas = document.getElementById('map_canvas');
      
        var
map_options = {
          center: new google.maps.LatLng(52.132633, 5.2912659999999505),
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
    
        var
map = new google.maps.Map(map_canvas, map_options);
    
        var
point = new google.maps.LatLng(51.85773469999999, 4.564891699999976)
        var
marker = new google.maps.Marker({    
            position : point,
            map : map
        });
      }

?>
Gewijzigd op 14/08/2014 14:52:13 door stefan H
 
- SanThe -

- SanThe -

14/08/2014 14:59:06
Quote Anchor link
Ik heb geen idee wat je aan het doen bent.
Maar ik, als nog Javascript lerende, zie dat je een function aanroept met alleen de naam.
Terwijl de function een parameter verwacht.
 
Ivo P

Ivo P

14/08/2014 15:04:12
Quote Anchor link
var centerPos;

dat dient dus te staan voor regel 2 van je script. (ok andere plek kan ook, maar niet IN een functie)
 
Stefan H

stefan H

14/08/2014 15:05:01
Quote Anchor link
wat ik wil is de waarde van de function getLocation(position)gebruiken in mijn volgende function

en die waarde gebruiken bij center van de google map.

welke functie bedoel je dan ?
 
- SanThe -

- SanThe -

14/08/2014 15:07:06
Quote Anchor link
navigator.geolocation.getCurrentPosition(getLocation, locationFail);

function getLocation(position)
 
Stefan H

stefan H

14/08/2014 15:08:58
Quote Anchor link
heb nu onderstaande en krijg niet de melding van undefined maar krijg wel de error Cannot read property 'lat' of null.

maar lat is wel te zien in de console als ik dit die oproep in de functie function getLocation(position)
 
- SanThe -

- SanThe -

14/08/2014 15:12:27
Quote Anchor link
var myLat = position.coords.latitude;

Dat komt dus van position, de parameter, die jij niet meegeeft.
Dus lijkt mij null logisch.
 
Stefan H

stefan H

14/08/2014 15:15:52
Quote Anchor link
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 ?

Toevoeging op 14/08/2014 16:31:52:

Iemand nog een idee ?
 
Wouter J

Wouter J

14/08/2014 17:01:36
Quote Anchor link
>> Iemand nog een idee ?

Pff, we hebben een uurtje niet gereageerd. Blijf onthouden dat we hier allemaal vrijwillig onze vrije tijd opofferen om mensen als jou te helpen...

Het is vrij simpel: Variabelen aangemaakt met het woordje "var" zijn alleen bekend *binnen* de eigen scope:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
var a = 'hello';

function b() {
    alert(a);
}


b(); // zal niet gaan werken, a is niet bekent binnen de scope van de b() functie


Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
function b() {
    var a = 'foo';
}


b();
alert(a); // werkt nog steeds niet, a is alleen bekent binnen de scope van de b() functie


Je kan in verschillende scopes variabelen met dezelfde naam hebben:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
var a = 'foo';

function b() {
    var a = 'bar';
    alert('Vanuit b: ' + a); // "Vanuit b: bar"
}

alert('Vanuit base: ' + a); // "Vanuit base: foo"


Hierop is 1 uitzondering: Anonymous functions krijgen toegang tot de variabelen van de scope waarin ze gedefinieerd zijn:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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"
};


Wanneer je een variabele definieerd zonder "var" definieer je ze altijd in de global scope (de global scope is overal beschikbaar):
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
a = 'foo';

function b() {
    alert(a);
}


b(); // "foo"


Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
function b() {
    a = 'bar';
}


b();
alert(a); // "bar"


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.
 
Stefan H

stefan H

14/08/2014 17:22:19
Quote Anchor link
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 ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
}
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/08/2014 22:55:37
Quote Anchor link
@Wouter
Wat jij zegt klopt niet, variabelen gedeclareerd in de global scope zijn altijd global ongeacht of je er het keyword var voorzet
 
Stefan H

stefan H

15/08/2014 06:35:21
Quote Anchor link
Ger Weet jij dan misschien hoe ik het werkend kan krijgen ?
 
Ivo P

Ivo P

15/08/2014 09:56:29
Quote Anchor link
ik ben het niet eens met het verhaal van Wouter.
Ik heb even een test script gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.