• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[DISKUSSION] Böse globale Variablen :P

uthred

New member
Mal ne Frage, warum soll man bei JS eigentlich keine globalen Variablen nehmen?

Ich meine selbst wenn man komplett Objektorientiert und mit Klassen arbeitet, schafft es Firbug, Breakpoints überall zu setzen und während der Laufzeit noch den Inhalt zu ändern...

Bei Java, C++, C# kann ich das ja noch verstehen, da gibt es dann private "unsichtbare" Variablen...
 
es geht ja nicht darum, daß der debugger keine variablen ändern oder sehen soll, das soll er ja, wie auch in c++(wenn sie nicht wegoptimiert wurden). es geht ja darum, dass keiner zufällig die selbe globale variable wie ein anderer nutzt und sich wundert warum etwas nicht funktioniert. und es geht darum, dass du bei globalen variablen schlecht unter kontrolle hast wo sie von welcher stelle zu welchem zeitpunkt belegt werden. das mag man bei kleinen projekten nicht als problem sehen, aber bei großen verlierst du den überblick über deine globalen variablen und verschiebst diesen globalen "status" besser an ein objekt was sich dann um die funktionalität in abhängigkeit des nun eigenen "status" kümmert.
 
Das was du bei Java und c# unter Privat und global Variable verstehst gibt es in ECMA_Script(JavaScript) nicht. Das hat was mit der Objektorientierung zu tun.
In Java hast du ein Klassenbasierte Objektorientierung, wen eine Klasse in Java einmal initialisiert wurde kannst die sie zur Laufzeit nicht mehr verändern. In ECMA geht das sehr wohl dafür hast du aber auch kein richtige Klassenbasierte Objektorientierung.
Global Java:
Code:
public class Example {
    public static int a;
    public static int b;
}
Via Example.a hast du Zugriff auf die Globale Variable a im der Klasse Example.


Da was man in Javascript unter Globale Variable versteht , ist eine Variable die Außerhalb eines Funktionsobjektes steht oder ohne das Schlüsselwort "var" erstellt wurde.

Du kannst in JavaScript auch ein Funktionsobjekt erstellen z.B Auto wenn du in das Objekt nun via des Schlüsselworts this auch "globale variabelen " erstellen die sind dann in den Objekt Auto global.
Also
Code:
function Auto(){
this.Vmax = 250;
var tankinhalt = 56;
}

Auto.prototype.getTankinhalt = function(){
return tankinhalt
}
Dieser code funktioniert nicht weil Tankinhalt nur im Konstruktor bekannt ist, würdest du das Schlüsselwort var weglassen hast du eine Globale Variable die ist dann auch in getTankinhalt bekant.

this.Vmax ist in deinem gesamten Objekt bekannt und kannst du überall im Objekt Auto verwenden.


Wie hesst schon verlauten lassen hat geht es hierbei nur um ein Überschichts Sache, an dem Technischen ablauf verändert sich nichts. Ein Debugger kann immer zur Laufzeit Variablen einsehn und ändern.

Es gibt 2 Videos die sollte man einfach mal ansehn ob man die versteht ist erst mal tivial. Irgendwann fällt dir dann ein Ah.. das habe ich schon mal irgendwo gesehen /gehört.
und
https://www.youtube.com/watch?v=2pL28CcEijU
 
Zuletzt bearbeitet:
Zurück
Oben