Hulp uitleg Var en functions
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)
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
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);
?>
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);
?>
Het woordje var weghalen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
var centerPos;
function success()
{
centerPos = new google.maps.LatLng(52.132633, 5.2912659999999505);
}
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
heb nu onder staande maar krijg nog steeds undefined in mijn console
Ziet iemand wat er hier fout is ?
Code (php)
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
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
});
}
?>
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
});
}
?>
ze heb dan ook nog steeds "var centerPos" IN je functie staan...
var centerPos;
Dus alleen bekent in de function().
Code (php)
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
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
});
}
?>
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
Maar ik, als nog Javascript lerende, zie dat je een function aanroept met alleen de naam.
Terwijl de function een parameter verwacht.
dat dient dus te staan voor regel 2 van je script. (ok andere plek kan ook, maar niet IN een functie)
en die waarde gebruiken bij center van de google map.
welke functie bedoel je dan ?
function getLocation(position)
maar lat is wel te zien in de console als ik dit die oproep in de functie function getLocation(position)
Dat komt dus van position, de parameter, die jij niet meegeeft.
Dus lijkt mij null logisch.
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 ?
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)
1
2
3
4
5
6
7
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
function b() {
alert(a);
}
b(); // zal niet gaan werken, a is niet bekent binnen de scope van de b() functie
Code (js)
1
2
3
4
5
6
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
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)
1
2
3
4
5
6
7
8
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"
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)
1
2
3
4
5
6
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"
};
// 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):
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Wat jij zegt klopt niet, variabelen gedeclareerd in de global scope zijn altijd global ongeacht of je er het keyword var voorzet
Ger Weet jij dan misschien hoe ik het werkend kan krijgen ?
Ik heb even een test script gemaakt.
Code (php)
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
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>
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
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.