Archief - Javascript: variabele uit functie halen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ctuxboy

Legacy Member
Heb al heel veel gegoogled op dit onderwerp, maar vind geen passend antwoord.
Hoe haal je een variabele uit een functie, zodat je de variabele in de rest vh script kan gebruiken?

Vb.
Code:
<script>
...
function show_map(position) {
// variabelen binnen de fuctie
  var [B]latitude[/B] = position.coords.latitude;
  var [B]longitude[/B] = position.coords.longitude;
}
...
// variabelen buiten de functie
var positie = [B]latitude[/B]+" , "+[B]longtitude[/B];
alert(positie);
...

Tyfius

Legacy Member
Om snel te zijn kan je ze globaal declareren:

Code:
<script>

var latitude;
var longitude;

function show_map(position) {
  latitude = position.coords.latitude;
  longitude = position.coords.longitude;
}

...
</script>

ctuxboy

Legacy Member
Tyfius zei:
Om snel te zijn kan je ze globaal declareren:

Code:
<script>

var latitude;
var longitude;

function show_map(position) {
  latitude = position.coords.latitude;
  longitude = position.coords.longitude;
}

...
</script>

Heb ik al geprobeerd, maar krijg dan melding 'undifened'
Zelfs als je een waarde geeft:
Code:
var latidude = 1;

Dan retourneerd deze de waarde '1' en niet de de waarde die is meegegeven uit de functie.

De Wouter

Legacy Member
Roep je de functie show_map wel aan in je code? Bij mij werkt het perfect, ben je zeker dat er wel waardes in je position object zitten?

Tyfius

Legacy Member
Dan doe je elders iets mis: Edit fiddle - JSFiddle

Input:
Code:
var latitude = 50;
var longitude = 50;

function print() {
    document.write("Latitude: " + latitude);
    document.write("<br/>");
    document.write("Longitude: " + longitude);
    document.write("<br/>");
}

function update() {
    latitude = 100;
    longitude = 20;
}

print();
update();
print();

Output:
Code:
Latitude: 50
Longitude: 50
Latitude: 100
Longitude: 20

ctuxboy

Legacy Member
Tyfius zei:
Dan doe je elders iets mis: Edit fiddle - JSFiddle

Input:
Code:
var latitude = 50;
var longitude = 50;

function print() {
    document.write("Latitude: " + latitude);
    document.write("<br/>");
    document.write("Longitude: " + longitude);
    document.write("<br/>");
}

function update() {
    latitude = 100;
    longitude = 20;
}

print();
update();
print();

Output:
Code:
Latitude: 50
Longitude: 50
Latitude: 100
Longitude: 20

Dit werkt inderdaad :doh:

Eigenlijk probeer ik de lat en lon uit deze functie te halen:

Code:
function onLocationFound(e) {
    ...
}

Zou het dan aan de functie liggen?
Deze functie komt uit de Leaflet library:
Leaflet on Mobile - Leaflet - a JavaScript library for mobile-friendly maps

bealzebub

Legacy Member
Javascript callbacks zijn asynchroon, heb ik de vorige keer al mooi uitgelegd.

Event handlers worden aangeroepen als ze zich voordoen. In jouw geval dus wil 'on("locationfound", ...)' dus gewoon zeggen: "als je de locatie gevonden hebt, wanneer dat dan ook is, dat kan nu of binnen vijf minuten zijn". Je kan buiten die functie dus niet weten wanneer die callback zal aangeroepen worden en dus wanneer je de waarden effectief ter beschikking hebt.

Je zal dus moeten de verwerking van die lat en long waarden doen vanuit je callback function onLocationFound, want dan pas heb je de zekerheid dat je de waarden hebt:

Code:
function doeIetsMetLatLng(lat,lng) {
    // Doe je ding
}

function onLocationFound(e) {
   var lat = e.latlng.lat;
   var lng = e.latlng.lng;

    doeIetsMetLatLng(lat,lng); 
}

Ik had in je vorige post al heel duidelijk gezegd dat je vroeg of laat met alles in een los hoopje te gooien zonder de basis van Javascript async te begrijpen in de problemen ging komen en met je hoofd tegen een muur lopen (en blijkbaar dringt het niet door want je gooit al m'n goeie raad gewoon de deur uit)&#8230; point proven ;)

ctuxboy

Legacy Member
bealzebub zei:
Javascript callbacks zijn asynchroon, heb ik de vorige keer al mooi uitgelegd.

Event handlers worden aangeroepen als ze zich voordoen. In jouw geval dus wil 'on("locationfound", ...)' dus gewoon zeggen: "als je de locatie gevonden hebt, wanneer dat dan ook is, dat kan nu of binnen vijf minuten zijn". Je kan buiten die functie dus niet weten wanneer die callback zal aangeroepen worden en dus wanneer je de waarden effectief ter beschikking hebt.

Je zal dus moeten de verwerking van die lat en long waarden doen vanuit je callback function onLocationFound, want dan pas heb je de zekerheid dat je de waarden hebt:

Code:
function doeIetsMetLatLng(lat,lng) {
    // Doe je ding
}

function onLocationFound(e) {
   var lat = e.latlng.lat;
   var lng = e.latlng.lng;

    doeIetsMetLatLng(lat,lng); 
}

Ik had in je vorige post al heel duidelijk gezegd dat je vroeg of laat met alles in een los hoopje te gooien zonder de basis van Javascript async te begrijpen in de problemen ging komen en met je hoofd tegen een muur lopen (en blijkbaar dringt het niet door want je gooit al m'n goeie raad gewoon de deur uit)&#8230; point proven ;)

Ik heb je vorige post goed doorgenomen en bestudeerd, en heb inderdaad weinig JS-ervaring en zonder te begrijpen lukt het niet of zéér moeilijk.
In je script stond ook genoeg uitleg. Bovenstaand script vind ik al véél duidelijker en begrijpelijker en daaruit kan ik stap per stap leren hoe alles werkt. Hiermee kan ik verder, en zelf de rest opbouwen.
Intussen ben ik ook een handleiding JS aan het doornemen.
Alvast bedankt voor je info, geduld en hulp, en mijn excuses dat ik een harde leerling ben ;)

TheBud

Legacy Member
Javascript is niet meer als een blok tekst die de browser zelf interpreteert. Dezelfde logica geldt dus, als je een verwijzing maakt in paragraaf 1 die je in paragraaf 3 beschrijft gaat de lezer niet weten waar je het over hebt. Je browser ervaart hetzelfde, vandaar dat hij die verwijzing als "undefined" beschouwt. Hij weet gewoon niet waar je het over hebt omdat hij het betreffend stukje nog niet gelezen heeft.

Event handlers kun je vergelijken met een abbonement die je neemt op een tijdschrift. Je zegt dan dat je een "subscription" wil op een bepaalde gebeurtenis, bv iemand die op een knop duwt. Een soort van verwittiging van "He, ik draai". In jou geval heb je een subscription gevraagd op onLocationFound. Dus als dat gebeurt gaat hij jou code laden. Die analogy van subscriptions wordt overal gebruikt dus kun je ook op terugvallen als je iets opzoekt via google.

Dit betekent ook dat je stukje code volledig los staat op de rest en volledig onafhankelijk draait. Je hebt enkel een "afspraak" gemaakt dat die code die je meegeeft moet draaien.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan