[JS] global scope van uit functie?

Pagina: 1
Acties:

  • palloquin
  • Registratie: Juli 2000
  • Laatst online: 29-01-2021
Hi,

Ik zoek een manier om vanuit een functie global-scope variable te creeren in Javascript... (IE only).

Any thoughts?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

global:
variabele = "bla"

local:
var variabele = "bla";

Beetje vreemd systeem in JS IMHO.. maar goed, het werkt. Het is dus overigens ook aan te raden altijd dit te doen:

for(var i=0;i<arr.length;i++){}

Anders gebeuren er soms gekke dingen met de scope van de 'i'..

  • palloquin
  • Registratie: Juli 2000
  • Laatst online: 29-01-2021
DAT MEEN JE NIET!!!

als ik binnen een functie impliciet een variable declareer (zonder var statement) dan is dat ding automaatisch GLOBAL???

Verwijderd

Op dinsdag 26 februari 2002 10:54 schreef palloquin het volgende:
DAT MEEN JE NIET!!!

als ik binnen een functie impliciet een variable declareer (zonder var statement) dan is dat ding automaatisch GLOBAL???
Nee. Globals moet je buiten functies declareren.

Binnen functies wordt het gebruik van var aangeraden. Ik doe het echter ook bij alle globals.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

:o

ff getest, en dit werkt dus inderdaad:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var global1;

function global() {

global1 = 'blaat';
global2 = 'moeh!';

}

function showglobals() {

document.write(global1 + '<br>');
document.write(global2 + '<br>');

}

Is dus ook nieuw voor mij. Erg mooi is het niet, en het nodigd erg uit tot slordig programmeren. Liever had ik ook een type-declaration gezien waarmee je impliciet een variabele global kan maken.

Intentionally left blank


Verwijderd

Op dinsdag 26 februari 2002 10:57 schreef Cheatah het volgende:

[..]

Nee. Globals moet je buiten functies declareren.

Binnen functies wordt het gebruik van var aangeraden. Ik doe het echter ook bij alle globals.
Actually, voor zover ik weet zijn alle variabelen die je zonder 'var' declareert automatisch globaal.

Ik raad het echter ook af, voor je het weet zit je met een shitload aan variabelen die niet te garbage-collecten zijn.

Verwijderd

Op dinsdag 26 februari 2002 11:02 schreef crisp het volgende:

Is dus ook nieuw voor mij. Erg mooi is het niet, en het nodigd erg uit tot slordig programmeren. Liever had ik ook een type-declaration gezien waarmee je impliciet een variabele global kan maken.
Ik vind het vaag. Volgens mij hoort het te zijn zoals Bosmonster zegt. Maar ik weet bijna zeker dat dit een tijdje geleden niet werkte.

Toch vind ik ook dat je globals aan het begin van je script moet declaren.

Eigenlijk vind ik het fout dat het kan. Van alle for loopjes waar je een var in hebt gebruikt, blijven die globals staan :{

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Cheatah:
Volgens mij hoort het te zijn zoals Bosmonster zegt.
Maar Bosmonster zegt toch precies hetzelfde?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Hmm, ja je hebt gelijk :o

Ik ga wel even een kop koffie halen ;)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Hehe..

Ik heb hier laatst een hele serie tests op uitgevoerd zeg maar.. om alle ins en outs van die scopes te achterhalen..

Daar kwam ik erachter dat het een beetje vreemd in elkaar zit :P

Ik ga nog ff een voorbeeld testje maken misschien..ff kijken.. (heb die tests allemaal weggeflikkerd denk ik)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Even de jsguide erop nageslagen; daar wordt je ook niet veel wijzer van:
Variable Scope

When you set a variable identifier by assignment outside of a function, it is called a global variable, because it is available everywhere in the current document. When you declare a variable within a function, it is called a local variable, because it is available only within the function.

Using var to declare a global variable is optional. However, you must use var to declare a variable inside a function.

Intentionally left blank


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op dinsdag 26 februari 2002 11:26 schreef crisp het volgende:
Even de jsguide erop nageslagen; daar wordt je ook niet veel wijzer van
Ik begrijp het volgens mij aardig...
Ik zal het proberen uiteen te zetten.

Wanneer je een globale variabele declareert met var gebeurt het volgende:
code:
1
2
3
4
5
6
var varnaam;
^    ^
|____|____> He, ik ga een variabele bewaren... 
     |  hmm in welke scope zit ik? 
     |  daar hoortie nl. bij! Ahhh, global, ok...
     |____> Goed, we noemen 'm varnaam.

Bij een function gebeurt 't zelfde, alleen wordt de variabele weggegooid wanneer de scope "afloopt":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function f ()
{ <---------- He krijg nou niks, een nieuwe scope. 
          We noemen m f.
  var varnaam;
  ^    ^
  |____|____> He, ik ga een variabele bewaren... 
     |  hmm in welke scope zit ik? 
     |  f, zie ik... hmhm
     |____> Goed, we noemen 'm varnaam.

} <----------- He, de scope rondt af... Welke variabelen hadden
           we allemaal? ... 's kijken, ah "varnaam". 
           Oppleuren die zooi, scope is klaar.

Maar, wanneer je nu geen variabele declareert, weet de compiler ook niet in welke scope hij thuishoort. Hij zal omhoog gaan langs alle scopes (de stack) om te kijken of hij bestaat, en zo niet, zal hij hem aanmaken. En dan vind ik het niet zo gek dat hij die variabele dan aanmaakt in de scope waar hij het laatst gekeken heeft of hij bestaat, namelijk de global scope.

Je hoeft de variabele tenslotte niet te declareren, om hem "aan te maken"

hmmm beetje vaag verhaal, maar snappen jullie wat ik bedoel?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Het ging mij eigenlijk om dit zinnetje:
Using var to declare a global variable is optional. However, you must use var to declare a variable inside a function.
Hieruit begrijp ik dat een variabele declareren binnen een functie zonder 'var' eigenlijk uit den boze is...

Intentionally left blank


Verwijderd

Op dinsdag 26 februari 2002 11:55 schreef drm het volgende:
hmmm beetje vaag verhaal, maar snappen jullie wat ik bedoel?
Uitstekend. (8>

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

crisp:
Het ging mij eigenlijk om dit zinnetje:

Hieruit begrijp ik dat een variabele declareren binnen een functie zonder 'var' eigenlijk uit den boze is...
Uit den boze in de zin van: het werkt wel, maar je kunt het beter niet doen, ja dat denk ik wel.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Op dinsdag 26 februari 2002 12:36 schreef drm het volgende:

[..]

Uit den boze in de zin van: het werkt wel, maar je kunt het beter niet doen, ja dat denk ik wel.
Precies zo ja: eigenlijk uit den boze.
Er wordt echter met geen woord gerept wat de consequenties zijn als je binnen een functie zonder var een variabele declareerd. Dat die variabele dan global blijkt te worden lijkt me dus een neven-effect waar je eigenlijk niet van uit mag gaan...

Intentionally left blank


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

De jsreference zegt er dit over:
The scope of a variable is the current function or, for variables declared outside a function, the current application.

Using var outside a function is optional; you can declare a variable by simply assigning it a value. However, it is good style to use var, and it is necessary in functions in the following situations:
  • If a global variable of the same name exists.
  • If recursive or multiple functions use variables with the same name.
Dit betekend voor mij dat zonder var declareren binnen een function dus wel automatisch inhoudt dat deze global wordt.

Today's subliminal thought is:


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Op dinsdag 26 februari 2002 13:39 schreef Annie het volgende:
De jsreference zegt er dit over:
[..]

Dit betekend voor mij dat zonder var declareren binnen een function dus wel automatisch inhoudt dat deze global wordt.
Nee, het 1e punt betekent dat je een variabele die al als global bestaat declareerd als local waardoor je de global niet beinvloedt.
Het 2e punt zegt dat declareren van een varabele binnen een functie zonder 'var' variabelen met dezelfde naam in een andere functie, of dezelfde functie bij recursie kan beinvloeden. Dit impliceerd een 'global effect', maar laat in het midden of de variabele zelf global is.
Kortom: het staat er niet, maar je zou het eruit kunnen afleiden.

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Om op de oorspronkelijke vraag nog even terug te komen:
Ik zou een global array definieren, en daar dan binnen de functie een (eventueel named) element aan toevoegen.
Hiermee voorkom je de verwarring of een variabele nu wel of niet global is als hij (zonder 'var') binnen een functie gedeclareerd wordt.

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Snap het probleem niet.. gewoon altijd "var" gebruiken, tenzij het om een global gaat..

Das toch niet al te ingewikkeld? :P
Pagina: 1